30

运行时是否可以指定包含目录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}从命令行设置吗?

4

2 回答 2

11

如果您的标头的路径相对于您的源是固定的,那么您应该能够避免必须通过命令行传递此信息。

假设您的项目的目录结构是:

/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 文件等)

于 2012-10-20T10:01:31.600 回答
9

正确的方法是在 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 .

于 2012-10-20T08:19:33.407 回答