41

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

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

怎么/B/CMakeLists.txt能从内部引用/A/CMakeLists.txt才能调用foo呢?

我试图将搜索路径设置为/B/CMakeLists.txt通过:

  • CMAKE_INCLUDE_PATH
  • CMAKE_MODULE_PATH
  • CMAKE_SOURCE_DIR

但他们都没有工作。

CMake 仍然抱怨Unknown CMake command "foo".

4

2 回答 2

59

这可以用 来完成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.

于 2013-06-21T06:53:22.817 回答
45

如果此文件仅包含函数定义,则不应将其称为 CMakeLists.txt,而应将其称为 some_adequate_name。制作

你可以在需要这些函数定义的地方使用include.

于 2013-06-21T07:02:38.657 回答