Подтвердить что ты не робот

Как включить дополнительный 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".

4b9b3361

Ответ 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.