CMake对定义的(预处理器)头文件的依赖性

时间:2011-07-01 09:12:01

标签: c++ cmake

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

基本上归结为:

#define HEADER_FILE "somefile.h"
#include HEADER_FILE

CMake不会将"somefile.h"添加到此源文件的依赖项列表中!

如何让CMake正确识别这种依赖?

(我知道我可以做#if 0块并包含所有文件,但这包括太多其他来源的依赖项,或者首先打败了整个目的 - 取决于你的方式它)

2 个答案:

答案 0 :(得分:8)

您可以通过设置OBJECT_DEPENDS属性

来向源文件添加显式依赖项
set_property(SOURCE source.cpp APPEND PROPERTY OBJECT_DEPENDS "somefile.h")

您必须对包含配置文件的任何源文件执行此操作。

答案 1 :(得分: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

// main.cc
#include "meh.hh"

int main () {...}