ПрограммированиеПодсказкиОбщееОбщее

Доступ к параметрам VC++ проекта из кода

Автор:

Иногда нужно в С/С++ коде получить некоторые параметры из VC++ проекта, например его название. Очень полезно на случай всяких переименований в проекте.

Это можно сделать так:

Добавить в

Configuration Properties | C/C++ | Preprocessor | Preprocessor Definitions

например такие определения:

PROJECT_NAME=L\"$(ProjectName)\"
PROJECT_TARGET_FILENAME=L\"$(TargetFileName)\"

(тут я использую юникод)

И в коде соответсвенно можно обращаться:

wchar_t * GetProjectName()
{
  return PROJECT_NAME;
}

Также эти определения можно задать в
Configuration Properties | Resources | General | Preprocessor Definitions

И тогда можно использовать эти данные в ресурсных файлах .rc и .rc2
Например:

VS_VERSION_INFO VERSIONINFO
 FILEVERSION VERSION_FILE
 PRODUCTVERSION VERSION_PRODUCT
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS VS_FF_DEBUG
#else
 FILEFLAGS 0x0L
#endif
 FILEOS VOS__WINDOWS32
 FILETYPE VFT_DLL
 FILESUBTYPE VFT2_UNKNOWN
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "000904b0"
        BEGIN
            VALUE "InternalName",    PROJECT_NAME
            VALUE "OriginalFilename",    PROJECT_TARGET_FILENAME
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x9, 1200
    END
END

#Visual Studio

25 января 2011

Комментарии [8]

#1
22:16, 29 янв 2011

Спасибо, весьма полезно.

Прошло более 9 месяцев
#2
23:22, 2 ноя 2011

Такие же штуки можно использовать, если загружать солюшен из bat файла.

Пишем в батнике

  • * * *
  • set MY_SUPER_VAR=c:\super_path
    my_solution.sln

  • * * *
  • Ну и в preprocessor defenitions вставляем аналогичную строчку
    MY_SUPER_VAR_DEFENITION=L\"$(MY_SUPER_VAR)\"

    Удобно тем, что данная переменная будет работать только, когда солюшен запущен через батник. Либо можно использовать несколько батников с разными значениями.

    #3
    0:30, 3 ноя 2011

    Использовать CMake для генерации проекта, собирать как обычно из вижуалстудии.
    Закинуть в ресурсы файл CMakeCache.txt из папки сборки - он содержит все обработанные макросы и настройки в виде текста.
    Прочитать текст разобрать на имена полей и значения.

    Пусть решение не такое простое, как генерация заголовков, но зато можно получить все-все настройки, пути к файлам, и т.д..

    #4
    13:27, 23 фев 2012

    хм,а директорию поиска инклудов\либ добавить никак нельзя?
    т.е у меня проект был обновлен из mvs2005 на 10,но в 8студии у меня в параметрах среды стояли около 10 директорий с инклудами(физикс,дхсдк и т.д),а как известно в 2010 эту замечательную функцию убрали.. Прописывать эти директории для каждого проекта муторно(их около 15),есть ли вариант добавить через препроцессор эти директории?

    #5
    13:42, 23 фев 2012

    а мне кажется правильно что убрали инклуды в студии, я даже в 6-й студии не любил их потому что это проект-специфичные настройки и лежать должны в проекте.

    да и делать это часто не нада, раз настроил на проект и всё, или кто-то создает проекты по 10 в день?

    #6
    13:50, 23 фев 2012

    представь,но порой это так и происходит
    Например,когда тестируешь определенную фичу перед интеграцией

    Вот,что то нашел
    http://social.msdn.microsoft.com/Forums/nl-BE/vcgeneral/thread/a4… -6f644a679862

    Прошло более 2 лет
    #7
    18:37, 28 фев 2014

    Property sheet же, посоны. Чел выше правильную ссылку нашел.

    #8
    1:14, 1 мар 2014

    какойто де-факто неправильный подход... но интересно

    ПрограммированиеПодсказкиОбщееОбщее

    Тема в архиве.