2013-03-05 28 views
27

在CMake的文檔中,我們可以讀:CMake的:當使用add_definitions代替set_target_properties(目標屬性COMPILE_DEFINITIONS定義)

add_definitions

再添標誌來編譯器命令行用於在源當前目錄和下面。

COMPILE_DEFINITIONS property on directories

COMPILE_DEFINITIONS:編譯目錄的源預處理器定義。

COMPILE_DEFINITIONS property on targets

COMPILE_DEFINITIONS:編譯目標的源預處理器定義。

COMPILE_DEFINITIONS property on source files

COMPILE_DEFINITIONS:編譯源文件預處理器定義。

COMPILE_DEFINITIONSadd_definitions功能似乎重疊。 COMPILE_DEFINITIONS屬性看起來更加靈活。

如此看來,COMPILE_DEFINITIONS財產做一切add_definitions做,甚至更多。

那麼,在這種情況下必須我們調用add_definitions因爲COMPILE_DEFINITIONS屬性不能使用?

回答

34

自CMake第一次構建十多年前上線以來,add_definitions已存在於CMake中。

COMPILE_DEFINITIONS只是更新,更靈活和更細緻的方式來做到這一點。

它們總是都是:由於世界上99%以上的CMakeLists文件使用add_definitions,因此刪除它並不明智。 CMake開發人員非常努力地維護向後兼容性......有時會損害清晰度和簡單性。有時候用多種不同的方式來做基本相同的事情。

所以:add_definitions主要用於配置預先存在的CMakeLists文件 - 對於在引入COMPILE_DEFINITIONS之前已經存在的項目。而且,由於這些項目使用它,任何基於人們通過閱讀這些CMakeLists文件而學到的新項目也很可能使用add_definitions。

但是,如果單獨使用COMPILE_DEFINITIONS就足以滿足您的需求,那肯定沒有問題。

+7

你能解釋一下如何知道這個嗎?這是否在文檔中?爲了理解CMake的奧祕,你需要閱讀什麼? – Praxeolitic 2014-06-15 20:39:09

3

我不是說必須使用

這只是你的習慣的問題。

一些建議:

  • 使用add_definitions當你想添加到編譯器在當前目錄及以下來源的命令行 。它只是短於 類型。

  • 使用COMPILE_DEFINITIONS用於優化目標或特定 來源。

+1

謝謝。我的問題更多的是瞭解在哪些情況下add_definitions是有用的。因爲看起來COMPILE_DEFINITIONS屬性的功能相同甚至更多。 – Korchkidu 2013-03-05 19:13:08

+0

我給你一個理由 - 想簡化 - 使用add_definition。要完全控制 - 使用set_properties和COMPILE_DEFINITION。 – 2013-03-06 09:22:37

相關問題