繁体   English   中英

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

[英]How to read a CMake Variable in C++ source code

我想将库的版本号存储在一个地方。 因此,我在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文档中的研究没有得到任何结果,因此我希望有人能给我必要的建议。

提前致谢。

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

add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} )

但是,您也可以创建“头文件模板”并使用configure_file 这样,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

然后在您的cmakelists.txt中添加configure_file行:

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM