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

Список include_directories в CMake

У меня есть сборка 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), чтобы я мог добавить их в свою пользовательскую команду?

4b9b3361

Ответ 1

Вы можете использовать команду get_property для извлечения значения свойства directory 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