运行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}
吗?
答案 0 :(得分:9)
如果您的标题的路径相对于您的来源是固定的,那么您应该能够避免必须通过命令行传递此信息。
说出你项目的目录结构是:
/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文件等)。
答案 1 :(得分:7)
正确的方法是在CMakeLists.txt中定义一个变量并要求用户进行设置:
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})
现在您可以从命令行设置它:cmake -D YOURLIB_INCLUDE_DIR=/path/to/yourlib/include .