Включение include_directories в CMake - PullRequest
       4

Включение include_directories в CMake

52 голосов
/ 01 августа 2011

У меня есть сборка cmake, в которой я ищу кучу зависимостей, то есть у меня много экземпляров:

FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
  include_directories(${SOMEPACKAGE_INCLUDE_DIR})
  link_libraries(${SOMEPACKAGE_LIBRARIES})
endif(SOMEPACKAGE_FOUND)

Теперь я хочу добавить пользовательскую команду для построения предварительно скомпилированного заголовочного файла, но для этого мне нужно знать все пути, добавленные моими include_directories вызовами. Как я могу получить список этих каталогов (желательно с правильным форматом -I / path / to / directory), чтобы я мог добавить их в свою собственную команду?

Ответы [ 2 ]

88 голосов
/ 02 августа 2011

Вы можете использовать команду get_property, чтобы получить значение свойства каталога INCLUDE_DIRECTORIES

Примерно так:

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
  message(STATUS "dir='${dir}'")
endforeach()

Значение этого свойства каталога отслеживает только команды include_directories, которые ранее встречались в том же файле CMakeLists или были унаследованы от предыдущих вхождений в родительском файле CMakeLists. Если ваши команды find_package и include_directories разбросаны по многим подкаталогам, это становится сложной проблемой.

Если вы дойдете до этой точки, вы можете подумать о переопределении команды include_directories своей собственной функцией или макросом и отследить значения, переданные ей самостоятельно. Или просто накапливайте их в глобальном свойстве или во внутренней переменной кэша рядом с каждым вызовом include_directories.

См. Документацию здесь:

http://cmake.org/cmake/help/v2.8.8/cmake.html#command:get_property

http://cmake.org/cmake/help/v2.8.8/cmake.html#prop_dir:INCLUDE_DIRECTORIES

1 голос
/ 05 июля 2018

Наше решение для записи включает каталоги, добавленные conan в файл

function(output_conan_include_dirs)
    set(include_dir_str "")
    foreach(DIR ${CONAN_INCLUDE_DIRS})
        set(include_dir_str "${include_dir_str}${DIR}\n")
    endforeach()

    set(pth "${CMAKE_BINARY_DIR}/conan-includes.txt")
    file(WRITE "${pth}" "${include_dir_str}")
    message(STATUS "Conan include directories written to: ${pth}")
endfunction()

output_conan_include_dirs()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...