我有一个配置文件设置,它定义了要包含在某些组件中的正确头文件。后来我通过预处理器令牌包含该文件。不幸的是,CMake的依赖扫描程序完全忽略了头文件。
基本上归结为:
#define HEADER_FILE "somefile.h"
#include HEADER_FILE
CMake不会将"somefile.h"
添加到此源文件的依赖项列表中!
如何让CMake正确识别这种依赖?
(我知道我可以做#if 0块并包含所有文件,但这包括太多其他来源的依赖项,或者首先打败了整个目的 - 取决于你的方式它)
答案 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 () {...}