有誰知道在CMake文件中應用「包含一次」模式的簡單方法嗎?在C/C++中,它曾經在頭文件的開始和結尾需要一個#ifdef/#endif對,直到#pragma一度變得很普遍。當然,也可以在CMake中做同樣的事情,但是我認爲如果它不需要明確的條件語句會更好。是否有包含一次cmake文件的命令?
重編:看起來,return()命令應該這樣做。我會定義一個這樣的宏:
macro(include_once)
if (INCLUDED_${CMAKE_CURRENT_LIST_FILE})
return()
endif()
set(INCLUDED_${CMAKE_CURRENT_LIST_FILE} true)
endmacro()
在文件的開頭使用宏,沒有任何參數。因爲它是一個宏,所以返回來自文件的include命令,而不是來自宏本身。
請注意,創建的變量有一個奇怪的名稱,但CMake似乎接受這一點。
什麼是在CMake的文件你包括,你的設置是什麼,你*會*要求防止多重包含?就個人而言,我通常擁有「main」CMakeLists.txt(它不包含「包含」)和帶有輔助函數的模塊(不會抱怨首先包含多個包含)。在這裏,我不太清楚用例是什麼。 – DevSolar
有各種各樣的情況可能是必要的。具體來說,我有一個包含子目錄的頂級項目,我想讓每個子目錄成爲一個獨立項目。所以頂級項目和所有的子級都包含一個共享的定義文件。如果定義文件打印的東西,它打印得比我想要的多得多。這是一個處理開銷。等等。所以,我認爲有充足的理由要求這樣做。 –
如果子目錄是作爲獨立項目構建的 - 每個項目的輸出應該是獨立完成的 - 或者處理開銷的影響(即使對於大多數涉及的項目我都認爲是微不足道的,我不相信印刷信息的冗餘)用CMake處理,儘管我總是從一個單獨的CMakeLists.txt構建(包含)。但我願意讓這個休息一下,指出Tsyvarev在「如何」和「爲什麼」這兩個方面的出色答案。 – DevSolar