假设我们在文件夹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".
答案 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
将其包含在需要这些函数定义的位置。