如何包含额外的CMakeLists.txt

Jue*_*gen 31 search cmake include

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

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

如何/B/CMakeLists.txt从内部引用/A/CMakeLists.txt以便调用foo

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

  • CMAKE_INCLUDE_PATH
  • CMAKE_MODULE_PATH
  • CMAKE_SOURCE_DIR

但他们都没有工作.

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

Gui*_*ume 40

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

A/CMakeLists.txt的内容

function(foo)
    message(STATUS "heya")
endfunction()
Run Code Online (Sandbox Code Playgroud)

B/CMakeLists.txt的内容

cmake_minimum_required(VERSION 2.8)
include(${CMAKE_CURRENT_SOURCE_DIR}/../A/CMakeLists.txt)
foo()
Run Code Online (Sandbox Code Playgroud)

现在,包括另一个CMakeLists.txt也将运行该文件中的所有内容,因此如果B/CMakeLists.txt中有目标,您可能希望避免这样做

如果您可以修改代码,最好在调用之前在"顶级"CMakeLists.txt中定义函数add_subdirectory.


Ant*_*nio 33

如果此文件只包含函数定义,则不应将其称为CMakeLists.txt,而应将其称为some_adequate_name.cmake的

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