在cmake命令行上指定include目录

时间:2012-10-20 00:32:49

标签: include cmake command-line-arguments

运行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}吗?

2 个答案:

答案 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 .