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

Задание включенных каталогов в командной строке cmake

Можно ли указать каталог include при запуске cmake. Например

cmake . -INCLUDE=/foo/bar

Заголовочные файлы находятся в отдельном каталоге из источников, которые я хотел бы скомпилировать, и я хотел бы исправить это без использования Makefile, сгенерированного cmake.

Обновление

У проекта есть CMakeLists.txt. Выдержки:

INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/ga)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/utils)

Может ли ${EO_SOURCE_DIR} быть установленным из командной строки?

4b9b3361

Ответ 1

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

Скажите, что структура вашего проекта:

/CMakeLists.txt
/my_sources/main.cpp
/my_sources/foo.cpp
/my_includes/foo.hpp

и в вашем CMakeLists.txt у вас есть что-то вроде:

add_executable(MyExe my_sources/main.cpp my_sources/foo.cpp)

затем добавить папку /my_includes в список включенных путей поиска, вам нужно будет добавить следующее:

include_directories(my_includes)


Для получения дополнительной информации о include_directories, запустите

cmake --help-command include_directories

Ответ на вопрос о обновлении:

Да, используя параметр командной строки -D, просто

cmake . -DEO_SOURCE_DIR:PATH=<Path to required dir>

В результате этого происходит кэширование переменной ${EO_SOURCE_DIR}, поэтому вам нужен только один аргумент -D один раз (если только не изменен требуемый путь или вы не удалите файл CMakeCache и т.д.)

Ответ 2

Правильный способ сделать это - определить переменную в CMakeLists.txt и попросить пользователя установить ее:

set(YOURLIB_INCLUDE_DIR "" CACHE FILEPATH "Path to yourlib includes")

if(NOT EXISTS ${YOURLIB_INCLUDE_DIR}/header.h)
  message(SEND_ERROR "Can't find header.h in ${YOURLIB_INCLUDE_DIR})
endif()

include_directories(${YOURLIB_INCLUDE_DIR})

Теперь вы можете установить его из командной строки: cmake -D YOURLIB_INCLUDE_DIR=/path/to/yourlib/include .