Как включить дополнительный CMakeLists.txt
Скажем, у нас есть командный вызов foo
в CMakeLists.txt, который находится в папке /A
.
foo
определяется в antater 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".
Ответы
Ответ 1
Это можно сделать с помощью 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 есть целевые объекты
Если вы можете изменить свой код, было бы лучше определить ваши функции в CMakeLists.txt "верхнего уровня" перед вызовом add_subdirectory
.
Ответ 2
Если эти файлы просто содержат определения функций, вы не должны называть его CMakeLists.txt, но some_adequate_name. cmake
Чем вы можете включить его, где вам нужны определения этих функций, используя include
.