2015-05-04 77 views
3

我在將cmake PROJECT_VERSION_MAJOR變量導出到config.h文件時遇到問題。在我的主要CMakeLists.txt我在主CMakeLists.txt文件調用project()設置根據cmake的文件這個變量:無法導出cmake PROJECT_VERSION_MAJOR,因爲它等於零

cmake_minimum_required(VERSION 3.2.2) 
cmake_policy(SET CMP0048 NEW) 

set(PROJECT "SampleName") 

project(${PROJECT} 
    VERSION "0.0.0") 

configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) 

通過configure_file() invokation我想一些CMake的變量導出到config.h頭file.Please取看看我的config.h.cmake.file

#ifndef CONFIG_H 
#define CONFIG_H 

#cmakedefine PROJECT "@[email protected]" 

#cmakedefine PROJECT_VERSION "@[email protected]" 

#cmakedefine PROJECT_VERSION_MAJOR "@[email protected]" 

#cmakedefine PROJECT_VERSION_MINOR "@[email protected]" 

#cmakedefine PROJECT_VERSION_PATCH "@[email protected]" 

#endif 

在我的build目錄運行cmake ..命令後config.h創建,但它看起來像這樣:

#ifndef CONFIG_H 
#define CONFIG_H 

#define PROJECT "SampleName" 

#define PROJECT_VERSION "0.0.0" 

/* #undef PROJECT_VERSION_MAJOR */ 

/* #undef PROJECT_VERSION_MINOR */ 

/* #undef PROJECT_VERSION_PATCH */ 

#endif 

我想這種行爲的原因是以下cmake的文檔中記爲configure_file()功能:

拷貝一個文件到文件,並替換變量 值作爲輸入文件內容@[email protected]${VAR}引用。每個 可變參考將被替換爲變量 的當前值,如果變量未定義,則將替換爲空字符串。 此外,輸入行的格式爲:

#cmakedefine VAR ..

將與任一被替換:

#define VAR ...

或:視VAR是否在CMake的設置爲任何值不被認爲是 假恆定

/* #undef VAR */

通過if()命令。變量名稱後的行 上的」...」內容(如果有)如上處理。 #cmakedefine01 VAR的輸入文件 行將被類似替換爲 #define VAR 1#define VAR 0

問題是,我可以輸出cmake PROJECT_VERSION_MAJOR等於零的變量嗎?或者我註定要解析我的代碼中定義的PROJECT_VERSION

從漢克將意見後,新生成的文件看起來是這樣的:

#ifndef CONFIG_H 
#define CONFIG_H 

#define PROJECT "SampleName" 

#define PROJECT_VERSION "0.0.0" 

#define PROJECT_VERSION_MAJOR "0" 

#define PROJECT_VERSION_MINOR "0" 

#define PROJECT_VERSION_PATCH "0" 

#endif 

回答

3

我覺得你的情況,你不應該使用#cmakedefine指令。請使用簡單的#define代替:

#ifndef CONFIG_H 
#define CONFIG_H 

#define PROJECT "@[email protected]" 

#define PROJECT_VERSION "@[email protected]" 

#define PROJECT_VERSION_MAJOR "@[email protected]" 

#define PROJECT_VERSION_MINOR "@[email protected]" 

#define PROJECT_VERSION_PATCH "@[email protected]" 

#endif 
+0

謝謝,這有效! – Lazureus

+0

@Lazureus作爲文檔,你能分享生成的文件的樣子(作爲你的問題的附錄) – Antonio

+1

@Antonio,我爲你添加了新生成的文件,請看看答案。 – Lazureus