Подтвердить что ты не робот

Как читать переменную CMake в исходном коде на С++

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

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

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

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

    #ifndef VERSION_LIBINTERFACE
    #  define VERSION_LIBINTERFACE @[email protected]
    #endif

или это:

    unsigned int getLibInterfaceVersion()
    {
        return @[email protected];
    }

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

Спасибо заранее.

4b9b3361

Ответ 1

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

add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} )

Однако вы также можете создать шаблон "header-file" и использовать configure_file. Таким образом, CMake заменит ваш @LIBINTERFACE_VERSION @. Это также немного более расширяемо, потому что вы можете легко добавить дополнительные определения или переменные здесь...

например. создайте файл "version_config.h.in", выглядящий следующим образом:

#ifndef VERSION_CONFIG_H
#define VERSION_CONFIG_H

// define your version_libinterface
#define VERSION_LIBINTERFACE @[email protected]

// alternatively you could add your global method getLibInterfaceVersion here
unsigned int getLibInterfaceVersion()
{
    return @[email protected];
}

#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.