2013-06-21 119 views
19

假設我們在CMakeLists.txt文件夾/A中有一個命令調用foo如何包含額外的CMakeLists.txt

foo在antother CMakeLists.txt中定義,該文件位於文件夾/B中。

如何從/A/CMakeLists.txt內引用/B/CMakeLists.txt以便撥打foo

我試圖通過搜索路徑設置爲/B/CMakeLists.txt

  • CMAKE_INCLUDE_PATH
  • CMAKE_MODULE_PATH
  • CMAKE_SOURCE_DIR

,但沒有一次成功。

CMake的還是complaines Unknown CMake command "foo".

回答

26

可以與include來完成,這裏的一些簡單的例子:B的A /的CMakeLists.txt

function(foo) 
    message(STATUS "heya") 
endfunction() 

內容

內容/的CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 
include(${CMAKE_CURRENT_SOURCE_DIR}/../A/CMakeLists.txt) 
foo() 

現在,包括其他CMakeLists.txt也將運行該文件中的所有內容,因此如果B/CMakeLists.txt中有目標,您可以避免這樣做。

如果您可以修改代碼,最好在「調用add_subdirectory之前調用頂級「CMakeLists.txt」。

26

如果這個文件只包含函數定義,你不應該把它叫做CMakeLists.txt,而是叫some_adequate_name。 cmake

比你可以在需要使用include這些函數定義的地方包含它。

相關問題