【发布时间】:2017-06-05 07:15:03
【问题描述】:
我陷入了 CMake 依赖问题。当我修改 CXX 头文件时,CMake 没有重建程序。
我的文件结构是这样的
$ tree
.
├── a
│ ├── a.h
│ └── c.h
├── b
│ ├── b.h
│ └── c.h
├── CMakeLists.txt
└── main.cxx
文件内容:
啊。
$ cat a/a.h
#include "c.h"
b.h
$ cat b/b.h
#include "c.h"
main.cxx
$ cat main.cxx
#include "a/a.h"
#include "b/b.h"
int main()
{
}
CMake 依赖.internal
$ cat CMakeFiles/hello.dir/depend.internal
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.7
CMakeFiles/hello.dir/main.cxx.o
/proj/mtk09331/work/tmp/cmake/a/a.h
/proj/mtk09331/work/tmp/cmake/a/c.h
/proj/mtk09331/work/tmp/cmake/b/b.h
/proj/mtk09331/work/tmp/cmake/main.cxx
CMakeLists.txt:
$ cat CMakeLists.txt
add_executable(hello main.cxx)
如您所见,依赖列表中不存在 b/c.h。 因此,如果我修改了 b/c.h,CMake 将不会重建程序。
cmake 不允许使用相同的头文件名吗? 尽管它适用于重命名头文件。 但我想找到一种“正确”的方法来防止这种情况发生。
提前致谢
【问题讨论】:
-
也提供
CMakeLists.txt的内容。 -
已添加。谢谢!
-
为什么需要两个同名的不同文件?
-
不管 CMake 是什么,您都必须指定标头的完整路径,可以是绝对路径,也可以是相对于已注册的包含路径...您只是在写
#include "c.h",这很可能是相对的到 CMakeLists.txt 的目录,如果你没有指定任何include_directories。将 a.h 和 b.h 中的#include "c.h"分别更改为#include "a/c.h"和 b/c.h,两者都应该出现。 -
有两个不同团队开发的子项目。我们很难防止头文件名冲突。