我在將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
謝謝,這有效! – Lazureus
@Lazureus作爲文檔,你能分享生成的文件的樣子(作爲你的問題的附錄) – Antonio
@Antonio,我爲你添加了新生成的文件,請看看答案。 – Lazureus