2013-06-21 118 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这些函数定义的地方包含它。

相关问题