簡體   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