CMake:GCC预处理器IMACROS文件更改不会触发重建
我使用GCC的CMake:GCC预处理器IMACROS文件更改不会触发重建,gcc,compilation,cmake,preprocessor,compiler-flags,Gcc,Compilation,Cmake,Preprocessor,Compiler Flags,我使用GCC的-imacros选项来设置项目的所有预处理器定义(选项) 在imacros之前,我一直在使用一个原始文件,其中预处理器定义了名称,并在CMAKE中使用了一个正则表达式,我创建了-D列表,以放入CMAKE\u C\u标志 这可以很好地工作,但在文本编辑器中很难看到。为了增强这一点,我改为-imacros CMAKE_C_标志将包含-imacros“配置头的路径” 这很好,但是如果我在配置头中更改了一些配置项,CMAKE不会重新编译文件(看不到更改)。在旧版本中-正如您所料-如果某些-
-imacros
选项来设置项目的所有预处理器定义(选项)
在imacros
之前,我一直在使用一个原始文件,其中预处理器定义了名称,并在CMAKE中使用了一个正则表达式,我创建了-D
列表,以放入CMAKE\u C\u标志
这可以很好地工作,但在文本编辑器中很难看到。为了增强这一点,我改为-imacros
CMAKE_C_标志
将包含-imacros
“配置头的路径”
这很好,但是如果我在配置头中更改了一些配置项,CMAKE不会重新编译文件(看不到更改)。在旧版本中-正如您所料-如果某些-D
被更改,所有文件都将重新编译
有什么帮助吗?一个简单的方法
您可以使用源文件属性。但这需要为所有源文件设置如下内容:
设置源文件属性(
${sources}
性质
对象_取决于“配置头的路径”
)
项目中所有源文件的备选方案
CMake正式建议将所有定义放在一个头文件中,该头文件包含在所有源文件中。例如,可以使用从模板生成标题
但要按照您的思路使用-imacros
编译器标志,如果“配置头路径”文件发生更改,则有两种替代方法可以触发所有源文件的重建:
您可以通过以下方法将OBJECT\u dependens
的范围扩展到当前目录中的所有目标及其源文件:
如果继承了选项,则当请求的属性未在指定给该命令的范围内设置时,get_property()
命令将链接到下一个更高的范围<代码>目录
范围链到全局
<代码>目标
,源
和测试
链接到目录
因此,在您的情况下,这意味着:
define_属性(
来源
属性对象依赖于
继承
简要文档“简要文档”
完整文档“完整文档”
)
设置目录属性(
性质
对象_取决于“配置头的路径”
)
如果我理解正确,如果您的“配置头”应该/将会更改,您无论如何都必须重新运行CMake。然后,您可以简单地在“配置头”之外添加一个定义,以跟踪头,如下所示:
文件(时间戳“配置头的路径”\u时间戳)
添加定义(-DIMACROS\u TIMESTAMP=${\u TIMESTAMP})
现在,每当您的头获得新的时间戳时,所有目标的定义都在更改,构建系统将重建所有源文件
这是一个巨大的项目,不可能。但可能有一个类似的解决方案,使项目依赖于该文件?工程完美!感谢您的时间和CMake:D的推荐版本