2017-07-06 66 views
2

爲內部C進行支持庫,你會看到像這樣的命令定義:CMake佔位符如何工作?

set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") 

(在我從/usr/share/cmake-3.5/Modules/CMakeASMInformation.cmake安裝爲例)

感興趣的對象到我這裏來都是placeholders (phrase obtained here)<DEFINES><INCLUDES><FLAGS>;我試圖弄清楚它們如何與CMake的其餘部分進行交互。

鑑於我能夠通過設置CMAKE_ASM-ATT_FLAGS將標誌傳遞給我的彙編程序,我有種想法可能會將幻燈片佔位符映射到變量名稱......但設置CMAKE_ASM-ATT_INCLUDES似乎沒有做任何事情。

那麼<INCLUDES>將如何填充在這裏?它是否可以用目標特定的方式填充?

回答

1

中有佔位符的原點的小魔術:

  • <DEFINES>由add_definitions填補,target_compile_definitions命令和對應的屬性,

  • <INCLUDES>由include_directoriestarget_include_directories和填充所以,

  • <個FLAGS >由add_compile_optionstarget_compile_options等加填充CMAKE_ <LANG> _FLAGS變量及其具體結構對,

  • <SOURCE>是源文件和

  • <OBJECT>是對應對象。

也就是說,影響C/C++程序的構建的所有內容都會影響(對語言進行調整後)其他語言的庫/可執行文件。