2013-06-21 25 views
19

Supponiamo di avere una chiamata di comando foo in CMakeLists.txt che si trova nella cartella /A.Come includere un ulteriore CMakeLists.txt

foo è definito in un altro CMakeLists.txt che si trova nella cartella /B.

Come si può fare riferimento a /B/CMakeLists.txt dall'interno /A/CMakeLists.txt per chiamare foo?

ho cercato di impostare percorsi di ricerca per /B/CMakeLists.txt via:

  • CMAKE_INCLUDE_PATH
  • CMAKE_MODULE_PATH
  • CMAKE_SOURCE_DIR

ma nessuno di loro ha lavorato.

CMake complaines ancora Unknown CMake command "foo".

risposta

26

che può essere fatto con include, ecco qualche semplice esempio:

contenuto di un/CMakeLists.txt

function(foo) 
    message(STATUS "heya") 
endfunction() 

Contenuto di B/CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 
include(${CMAKE_CURRENT_SOURCE_DIR}/../A/CMakeLists.txt) 
foo() 

Ora, incluso un altri CMakeLists.txt eseguiranno anche tutto in quel file, quindi puoi evitare di farlo se ci sono obiettivi in ​​B/CMakeLists.txt

Se puoi modificare il tuo codice, sarebbe meglio definire le tue funzioni in un " livello superiore "CMakeLists.txt prima di chiamare add_subdirectory.

26

Se questo file contiene solo definizioni di funzioni, non è necessario chiamarlo CMakeLists.txt, ma some_adequate_name. CMake

di quanto si possa includerlo in cui è necessario queste definizioni funzioni utilizzando include.

Problemi correlati