2013-06-21 3 views
19

Скажем, у нас есть командный вызов foo в CMakeLists.txt, который находится в папке /A.Как добавить дополнительный CMakeLists.txt

foo определен в файле antake CMakeLists.txt, который находится в папке /B.

Как связаться с /B/CMakeLists.txt с кодом /A/CMakeLists.txt, чтобы позвонить foo?

Я попытался установить пути поиска к /B/CMakeLists.txt через:

  • CMAKE_INCLUDE_PATH
  • CMAKE_MODULE_PATH
  • CMAKE_SOURCE_DIR

, но ни один из них не работал.

CMake еще complaines Unknown CMake command "foo".

ответ

26

Это может быть сделано с 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.

26

Если эти файлы просто содержат определения функций, вы не должны называть его CMakeLists.txt, но some_adequate_name. cmake

Чем вы можете включить его там, где вам нужны определения этих функций, используя include.