2011-10-21 294 views
19

我想將相同的.cpp源文件編譯爲兩個不同的目標可執行文件,並使用cmake。一個將有一些儀器代碼,另一個不會。這樣我可以比較儀器的開銷。使用CMAKE編譯具有不同標誌的相同文件

我有用#ifdefs分開的工具代碼,所以我想用-D標誌定義一個值。我看到這是可能的

add_definitions(-DINSTRUMENT) 

但它看起來像然後適用於該目錄中創建的所有可執行文件。我想知道是否有一種好的方法來爲特定的可執行目標設置定義。

回答

21

您可以設定目標之一的COMPILE_DEFINITIONS屬性,使其具有特定目標的定義:

set_target_properties (instrumented_target PROPERTIES COMPILE_DEFINITIONS "INSTRUMENT") 

更新:

從CMake的2.8.11開始,你也可以使用target_compile_definitions爲相同的目的。

+0

謝謝你的作品。 –

+5

該屬性也可以在每個源文件的基礎上,使用「set_property(SOURCE source_file_name PROPERTY COMPILE_DEFINITIONS ...)」 – DLRdave

+1

@DLRdave,我認爲應該注意的是,使用'set_target_properties()'不會覆蓋定義已經通過前面定義的'add_definitions()'添加。 (我一直很擔心這個,直到我運行'make VERBOSE = 1') – mpontillo

相關問題