我現在感覺有點愚蠢。在最近將幾個較小的項目轉換爲使用CMake後,我決定擺脫一些「Platform_Config.h」文件。這些文件包含一些預處理指令,如#define USE_NEW_CACHE
和控制編譯。如何使用CMake爲某個目標創建C#定義?
我該如何將這些定義「轉換」爲使用CMake進行控制?理想情況下,通過使用這些「緩存」變量,用戶可以輕鬆編輯。
我現在感覺有點愚蠢。在最近將幾個較小的項目轉換爲使用CMake後,我決定擺脫一些「Platform_Config.h」文件。這些文件包含一些預處理指令,如#define USE_NEW_CACHE
和控制編譯。如何使用CMake爲某個目標創建C#定義?
我該如何將這些定義「轉換」爲使用CMake進行控制?理想情況下,通過使用這些「緩存」變量,用戶可以輕鬆編輯。
有兩種選擇。您可以使用add_definitions方法將定義爲編譯器標誌:例如在某處你的項目的CMakeLists.txt:
add_definitions(-DUSE_NEW_CACHE)
的CMake將確保-D前綴轉化爲正確的國旗爲你的編譯器(/ d的MSVC和-D爲GCC)。
或者,查看configure_file。它比較複雜,但可能更適合使用Platform_Config文件的原始方法。
您可以創建一個類似於您的原始Platform_Config.h的輸入文件,併爲其添加「#cmakedefine」行。
讓我們在Platform_Config.h.in電話:
// In Platform_Config.h.in
#cmakedefine USE_NEW_CACHE
// end of Platform_Config.h.in
然後當運行
configure_file(${CMAKE_SOURCE_DIR}/Platform_Config.h.in ${CMAKE_BINARY_DIR}/common/Platform_Config.h)
它會產生在構建-dir的新Platform_Config文件。 cmake中的這些變量也是cmakedefine將存在於生成的文件中,其他變量將被註釋掉或未註銷。
當然,您應該確保將實際生成的文件包含在源文件中後,才能正確找到它。
選項命令可能會提供您正在尋找的內容。
與目標上的編譯定義屬性一起使用,我認爲你完成了。 要設置在目標的屬性,使用命令設定的目標特性
option(DEBUGPRINTS "Prints a lot of debug prints")
target(myProgram ...)
if(DEBUGPRINTS)
set_target_properties(myProgram PROPERTIES COMPILE_DEFINITIONS "DEBUGPRINTS=1")
endif()
編輯:
i。在示例寫的選項顯示爲在CMake的GUI的複選框。
如果你想設置每個目標的定義:從2.8.11開始,你可以使用target_compile_definitions
。
在較早的版本中,您可能不想按原樣使用set_target_properties
,因爲它會覆蓋您之前設置的任何定義。首先調用get_target_property
,然後與之前的值合併。見add_target_definitions
here。
它是一個內置函數:http://www.cmake.org/cmake/help/v3。 0/command/target_compile_definitions.html – steveire 2014-12-11 22:36:11
@steveire很高興知道! [顯然它是在2.8.11版本中添加的](http://www.kitware。COM /博客/家庭/後/ 462)。 – 2014-12-12 16:10:39
正確:) http://www.cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fc61a7a74 – steveire 2014-12-12 18:05:46
以供將來參考用於set_target_properties正確的語法是: set_target_properties(myProgram PROPERTIES COMPILE_DEFINITIONS 「DEBUGPRINTS = 1」) – RishiD 2011-05-11 14:37:00