Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake对已定义(预处理器)头文件的依赖关系_C++_Cmake - Fatal编程技术网

C++ CMake对已定义(预处理器)头文件的依赖关系

C++ CMake对已定义(预处理器)头文件的依赖关系,c++,cmake,C++,Cmake,我有一个配置文件设置,它为某些组件定义了正确的头文件。稍后,我将通过预处理器令牌包含该文件。不幸的是,CMake的依赖项扫描程序完全忽略了头文件 基本上可以归结为: #define HEADER_FILE "somefile.h" #include HEADER_FILE CMake不会将“somefile.h”添加到此源文件的依赖项列表中 如何让CMake正确识别此依赖关系 (我知道我可以做到#如果0块并包含所有文件,但这要么包含了太多其他源的依赖项,要么首先破坏了整个目的——这取决于您是如

我有一个配置文件设置,它为某些组件定义了正确的头文件。稍后,我将通过预处理器令牌包含该文件。不幸的是,CMake的依赖项扫描程序完全忽略了头文件

基本上可以归结为:

#define HEADER_FILE "somefile.h"
#include HEADER_FILE
CMake不会将
“somefile.h”
添加到此源文件的依赖项列表中

如何让CMake正确识别此依赖关系


(我知道我可以做到#如果0块并包含所有文件,但这要么包含了太多其他源的依赖项,要么首先破坏了整个目的——这取决于您是如何做到的)

我可以建议将头文件设为通用文件而不是所有源文件吗?这也比我在任何生产代码中从未见过的方法更常见

像这样:

// meh.hh
#ifndef MEH_HH
#define MEH_HH

#ifdef THIS
# include <this>
#elif defined(THAT)
# include <that>
#else
# error meh
#endif 

#endif // MEH_HH

通过设置
OBJECT\u dependens
属性,可以向源文件添加显式依赖项:

set_property(SOURCE source.cpp APPEND PROPERTY OBJECT_DEPENDS "somefile.h")

对于包含配置文件的任何源文件,您都必须这样做。

这正是我想要摆脱的(我以前就是这么做的)。与其简单地定义每个头文件,我还需要为所有这些头文件提供一个可配置的头文件?不仅CMake会与之斗争,IDE和编辑器(想想“开关头/源”或“转到文件”)我的方法是C预处理器支持的方法:只需为要包含的文件名设置一个DEFINE。它不需要编写包装器文件,因此维护起来就更少了。C预处理器当然也支持我的文件;)文档也是一种维护,我认为少数包装文件在自我文档方面做得更好,因为它们使用了可用的定义,甚至可以通过在这些包装的顶部添加#定义来实现。您的方法意味着您要么需要包含定义头+头,要么直接向编译器提供定义。谢谢,这实际上在另一种情况下(处理不受支持的源文件)对我也有帮助。在CMAKE下处理遗留代码时遇到了这种情况。谢谢
set_property(SOURCE source.cpp APPEND PROPERTY OBJECT_DEPENDS "somefile.h")