include - instalar - Especificar incluir directorios en la línea de comando cmake
como instalar cmake en windows (2)
¿Es posible especificar un directorio de inclusión cuando se ejecuta cmake
? Por ejemplo
cmake . -INCLUDE=/foo/bar
Los archivos de encabezado están en un directorio separado de las fuentes que me gustaría compilar, y me gustaría remediar esto sin modificar el Makefile
generado por cmake
.
Actualizar
El proyecto tiene un CMakeLists.txt
. Extracto:
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/ga)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/utils)
¿Puede ${EO_SOURCE_DIR}
establecerse desde la línea de comando?
La forma correcta de hacerlo es definir una variable en CMakeLists.txt y pedirle al usuario que la configure:
set(YOURLIB_INCLUDE_DIR "" CACHE FILEPATH "Path to yourlib includes")
if(NOT YOURLIB_INCLUDE_DIR/header.h)
message(SEND_ERROR "Can''t find header.h in ${YOURLIB_INCLUDE_DIR})
endif()
include_directories(${YOURLIB_INCLUDE_DIR})
Ahora puede configurarlo desde la línea de comando: cmake -D YOURLIB_INCLUDE_DIR=/path/to/yourlib/include .
Si la ruta a sus encabezados se fija en relación con sus fuentes, entonces debe poder evitar tener que pasar esta información a través de la línea de comandos.
Supongamos que la estructura de directorios de su proyecto es:
/CMakeLists.txt
/my_sources/main.cpp
/my_sources/foo.cpp
/my_includes/foo.hpp
y en su CMakeLists.txt, actualmente tiene algo como:
add_executable(MyExe my_sources/main.cpp my_sources/foo.cpp)
luego, para agregar la carpeta /my_includes
a la lista de incluir rutas de búsqueda, solo necesita agregar lo siguiente:
include_directories(my_includes)
Para obtener más información sobre include_directories
, ejecuta
cmake --help-command include_directories
Respuesta para actualizar en cuestión:
Sí, usando la opción de línea de comando -D
solo haz
cmake . -DEO_SOURCE_DIR:PATH=<Path to required dir>
La variable ${EO_SOURCE_DIR}
se almacena en caché como resultado de esto, por lo que solo necesita este argumento -D
una vez (a menos que la ruta requerida cambie o elimine su archivo CMakeCache, etc.)