Mat*_* M. 46 c++ dependencies cmake header-files
我在一个小型的C++项目中使用CMake,到目前为止它运行得很好......有一个转折:x
当我更改头文件时,通常需要重新编译许多源文件(直接或间接包含它们的文件),但是cmake似乎只检测了一些要重新编译的源文件,从而导致状态损坏.我可以通过消除项目并从头开始重建来解决这个问题,但这绕过了使用make实用程序的目标:只重新编译所需的内容.
因此,我想我做错了什么.
我的项目非常简单有条理:
主目录有:
cmake_minimum_required(VERSION 2.8)
project(FOO)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
# Compiler Options
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++0x -Wall -Wextra -Werror")
include_directories($(FOO_SOURCE_DIR)/include)
add_subdirectory(src)
Run Code Online (Sandbox Code Playgroud)
"src"目录:
add_subdirectory(sub1)
add_subdirectory(sub2)
add_subdirectory(sub3)
add_subdirectory(sub4)
add_executable(foo main.cpp)
target_link_libraries(foo sub1 sub2 sub3 sub4)
Run Code Online (Sandbox Code Playgroud)
哪sub4
取决于sub3
哪个取决于sub2
哪个取决于sub1
以及子目录(sub3)的示例:
set(SUB3_SRCS
File1.cpp
File2.cpp
File3.cpp
File4.cpp
File5.cpp
File6.cpp
)
add_library(sub3 ${SUB3_SRCS})
target_link_libraries(sub3 sub1 sub2)
Run Code Online (Sandbox Code Playgroud)
我很高兴如果有人能把我的错误指向我,在这里搜索或在CMake上没有产生任何东西,所以我想这很容易或应该开箱即用......
(供参考,我在MSYS上使用cmake版本2.8.2)
编辑:
感谢Bill的建议,我已经检查了depend.make
CMake生成的文件,而且确实缺乏(严重).这是一个例子:
src/sub3/CMakeFiles/sub3.dir/File1.cpp.obj: ../src/sub3/File1.cpp
Run Code Online (Sandbox Code Playgroud)
是的,这就是所有,包括的所有内容都被引用:x
小智 16
您应该查看depend.make
二叉树中的文件.它会在CMakeFiles/target.dir/depend.make
.尝试找到其中一个缺少.h
您认为应该具有的文件.然后为cmake创建一个错误报告或通过电子邮件发送cmake邮件列表.
ony*_*ony 10
我刚刚遇到同样的问题.将路径include_directories()
从绝对路径更改为相对路径后,添加了适当的依赖关系.
看起来像CMake试图猜测哪些标题是系统,哪些标题与项目相关.我怀疑以/
传递的方式开头的目录-isystem /some/path
因此不会在生成的依赖项中显示.
如果无法替换${FOO_SOURCE_DIR}
相对路径,可以尝试使用适当的CMake函数计算相对路径.即:
file(RELATIVE_PATH FOO_SOURCE_REL_DIR
${CMAKE_CURRENT_SOURCE_DIR}
${FOO_SOURCE_DIR}/.)
include_directories(${FOO_SOURCE_REL_DIR}/include)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49816 次 |
最近记录: |