Как читать переменную CMake в исходном коде C ++ - PullRequest
32 голосов
/ 26 октября 2011

Я хотел бы хранить номер версии моей библиотеки только в одном месте.Итак, я определил такую ​​переменную в CMake-файле:

    SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface")

С этим определением я могу сгенерировать файл version.rc в соответствии с определением Microsoft, который я компилирую в библиотеку и впоследствии корректно отображается вокно свойств моего dll-файла.

Теперь я бы хотел использовать эту переменную CMake и в моем исходном коде на c ++, но на самом деле я не дошел до рабочего решения.Я пробовал разные вещи, как это:

    #ifndef VERSION_LIBINTERFACE
    #  define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@
    #endif

или это:

    unsigned int getLibInterfaceVersion()
    {
        return @LIBINTERFACE_VERSION@;
    }

Но компилятор ничего не примет.Поскольку мои исследования в CMake-документации не дали никаких результатов, я надеюсь, что кто-то может дать мне важный совет.

Заранее спасибо.

1 Ответ

53 голосов
/ 26 октября 2011

Самый простой способ сделать это - передать LIBINTERFACE_VERSION как определение с помощью add_definition :

add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} )

Однако вы также можете создать «шаблон файла заголовка» и использовать файл_конфигурации . Таким образом, CMake заменит ваш @ LIBINTERFACE_VERSION @. Это также немного более расширяемо, потому что вы можете легко добавить дополнительные определения или переменные здесь ...

например. создайте файл "version_config.h.in", похожий на этот:

#ifndef VERSION_CONFIG_H
#define VERSION_CONFIG_H

// define your version_libinterface
#define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@

// alternatively you could add your global method getLibInterfaceVersion here
unsigned int getLibInterfaceVersion()
{
    return @LIBINTERFACE_VERSION@;
}

#endif // VERSION_CONFIG_H

Затем добавьте строку configure_file в ваш файл cmakelists.txt:

configure_file( version_config.h.in ${CMAKE_BINARY_DIR}/generated/version_config.h )
include_directories( ${CMAKE_BINARY_DIR}/generated/ ) # Make sure it can be included...

И, конечно же, убедитесь, что в ваши исходные файлы включен правильный version_config.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...