Olu*_*ide 26 cmake include command-line-arguments
是否可以在运行时指定包含目录cmake.例如
cmake . -INCLUDE=/foo/bar
Run Code Online (Sandbox Code Playgroud)
头文件与我想要编译的源代码位于一个单独的目录中,我想在不修改Makefile生成的情况下解决这个问题cmake.
更新
该项目确实有一个CMakeLists.txt.摘抄:
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/ga)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/utils)
Run Code Online (Sandbox Code Playgroud)
可以${EO_SOURCE_DIR}从命令行设置吗?
Fra*_*ser 11
如果标题的路径相对于您的源是固定的,那么您应该能够避免必须通过命令行传递此信息.
说你的项目的目录结构是:
/CMakeLists.txt
/my_sources/main.cpp
/my_sources/foo.cpp
/my_includes/foo.hpp
Run Code Online (Sandbox Code Playgroud)
在你的CMakeLists.txt中,你现在有类似的东西:
add_executable(MyExe my_sources/main.cpp my_sources/foo.cpp)
Run Code Online (Sandbox Code Playgroud)
然后将/my_includes文件夹添加到包含搜索路径列表中,您只需添加以下内容:
include_directories(my_includes)
Run Code Online (Sandbox Code Playgroud)
有关详细信息include_directories,请运行
cmake --help-command include_directories
Run Code Online (Sandbox Code Playgroud)
回答有问题的更新:
是的,使用-D命令行选项就行了
cmake . -DEO_SOURCE_DIR:PATH=<Path to required dir>
Run Code Online (Sandbox Code Playgroud)
该变量因此而${EO_SOURCE_DIR}被缓存,因此您只需要-D一次该参数(除非所需的路径发生更改或删除了您的CMakeCache文件等)
正确的方法是在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})
Run Code Online (Sandbox Code Playgroud)
现在您可以从命令行设置它: cmake -D YOURLIB_INCLUDE_DIR=/path/to/yourlib/include .
| 归档时间: |
|
| 查看次数: |
37137 次 |
| 最近记录: |