如何包含额外的CMakeLists.txt

时间:2013-06-21 06:06:14

标签: search include cmake

假设我们在文件夹foo中的CMakeLists.txt中有一个命令调用/A

foo在文件夹/B中的另一个CMakeLists.txt中定义。

如何在/B/CMakeLists.txt内引用/A/CMakeLists.txt来呼叫foo

我尝试通过以下方式将搜索路径设置为/B/CMakeLists.txt

  • CMAKE_INCLUDE_PATH
  • CMAKE_MODULE_PATH
  • CMAKE_SOURCE_DIR

但他们都没有工作。

CMake仍抱怨Unknown CMake command "foo".

2 个答案:

答案 0 :(得分:36)

可以使用include完成,这里有一些简单的例子:

A / CMakeLists.txt的内容

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

B / 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中定义您的函数。

答案 1 :(得分:32)

如果这些文件只包含函数定义,则不应将其称为CMakeLists.txt,而应将其命名为some_adequate_name。 cmake

您可以使用include将其包含在需要这些函数定义的位置。