如何在C ++源代码中读取CMake变量

时间:2011-10-26 09:05:22

标签: c++ makefile cmake header-files

我想在一个地方存储我的图书馆的版本号。所以我在CMake文件中定义了这样一个变量:

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

根据这个定义,我可以根据Microsoft的定义生成一个version.rc文件,我将其编译到库中,然后在我的dll文件的属性窗口中正确显示。

现在我也想在我的c ++源代码中使用这个CMake变量,但实际上我没有找到一个有效的解决方案。我尝试过不同的事情:

    #ifndef VERSION_LIBINTERFACE
    #  define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@
    #endif

或者这个:

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

但是编译器不接受任何东西。由于我对CMake-Documentation的研究没有得到任何结果,我希望有人能给我一些基本的建议。

提前致谢。

1 个答案:

答案 0 :(得分:52)

最简单的方法是将LIBINTERFACE_VERSION作为add_definition的定义传递:

add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} )

但是,您也可以创建“标题文件模板”并使用configure_file。这样,CMake将取代你的@LIBINTERFACE_VERSION @。这也有点可扩展,因为您可以在这里轻松添加额外的定义或变量......

E.g。创建一个文件“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。