在配置階段完成之前,CMake(版本> = 2.8.7)以某種方式執行宏或命令作爲最後步驟嗎?在'配置'步驟完成前執行CMake中的命令或宏
以下幾行代碼顯示在屏幕上之前,功能應該被執行:
-- Configuring done
-- Generating done
到現在爲止我沒能找到這可以作爲一個依賴與add_custom_command
來實現這一目標的CMake add_custom_target
或add_dependencies
。
編輯: 我們有一個庫導出幾個CMake宏,並且在所有其他CMake命令運行後,必須在每個CMakeLists.txt
文件的末尾執行一些宏。 理想情況下,可以通過在CMakeLists.txt
文件中包含文件macros.cmake
來實現期望的行爲,而無需在此CMakeLists.txt
文件末尾添加額外的命令。
也可以通過收集一個宏中的所有功能來實現這一點,這需要在CMakeLists.txt
的末尾明確地調用。 但是,已經有幾個依賴庫需要進行調整,解決這個問題時會省略這些額外的工作。 此外,添加宏可以被遺忘,或者它是最後一條語句的要求很容易被違反。
例macros.cmake
:
macro(FINAL_MACRO)
message(STATUS "Last step before finishing Configure phase")
endmacro()
# HERE: something like add_custom_target(final_steps)
# followed by something like add_dependencies(final_steps cmake_configure_finished)
例頂級CMakeLists.txt
:
cmake_minimum_required(VERSION 2.8.7)
include(macros.cmake)
add_subdirectory(source)
add_subdirectory(interfaces)
# here FINAL_MACRO should get executed without explicitely writing it down
如果沒有其他的選擇,我們將不得不要求每一個用戶在其CMakeLists.txt
文件的末尾調用一個特殊的宏。
非常感謝你這個有趣的發現。這確實達到了預期的行爲。但我同意它肯定感覺有點脆弱。所以,也許這是最好的解決方案,要求明確執行最終的函數/宏,直到CMake提供一種官方的方式來做這樣的事情。 – MKroehnert
@MKroehnert - 是的,如果是我,我肯定會在每個CMakeLists.txt的末尾添加一個函數/宏調用。您仍然可以嘗試執行它的使用。使關閉功能取消預設處理器定義,停止構建工作。有點「哈克」,但不像取決於隱藏的CMake內部過程那麼糟糕? – Fraser
好的,謝謝你的建議。 – MKroehnert