我可以强制cmake在特定目标中包含头文件吗?

我可以强制cmake在特定目标中包含头文件吗?,c,gcc,cmake,c-preprocessor,C,Gcc,Cmake,C Preprocessor,我有一个用宏覆盖malloc的头文件。使用add_定义(-include../include/failing malloc test.h)我可以强制cmake在所有目标中包含此头文件。问题是,我只希望在某些目标(测试目标等)中包含头文件。我尝试使用target\u compile\u definition来实现这一点,但我无法达到相同的效果,因为target\u compile\u definition的工作方式似乎与add\u definitions不同。目前,我能想到的唯一解决方案是复制所有

我有一个用宏覆盖malloc的头文件。使用
add_定义(-include../include/failing malloc test.h)
我可以强制cmake在所有目标中包含此头文件。问题是,我只希望在某些目标(测试目标等)中包含头文件。我尝试使用
target\u compile\u definition
来实现这一点,但我无法达到相同的效果,因为
target\u compile\u definition
的工作方式似乎与
add\u definitions
不同。目前,我能想到的唯一解决方案是复制所有源文件并手动添加
#include“failing malloc test.h”
——这显然是我想要避免的。

CMake有一个基于属性的机制。可以指定给目标、源文件和其他零件上的特性。使用目标是常见的默认操作,因此提供了一整套
target.*
命令来设置目标的属性。如果要为特定目标中的所有源添加编译选项,请使用。不要将该属性用于定义预处理器符号以外的其他选项。这样你就能得到你想要的

target_compile_options(<my-test-target> "-include ../include/failing-malloc-test.h")
target\u compile\u选项(“-include../include/failed malloc test.h”)

CMake具有基于属性的机制。可以指定给目标、源文件和其他零件上的特性。使用目标是常见的默认操作,因此提供了一整套
target.*
命令来设置目标的属性。如果要为特定目标中的所有源添加编译选项,请使用。不要将该属性用于定义预处理器符号以外的其他选项。这样你就能得到你想要的

target_compile_options(<my-test-target> "-include ../include/failing-malloc-test.h")
target\u compile\u选项(“-include../include/failed malloc test.h”)

您是否尝试添加到特定的源文件?具体来说,
COMPILE\u标志
。不,我不知道这个。我对cmake还很陌生。我会看看这个,谢谢。使用
设置目标属性(主要属性编译标志)-include../include/failing malloc test.h“
我已经解决了我的问题!谢谢你给我提示酒店的东西!如果你想继续把它作为一个答案,我会接受它。考虑使用<代码> TajyCopyILL选项< /C> >而不是<代码> TajyCopyILL定义< /代码>——这是解决问题的“现代”方式。你试过添加到特定的源文件吗?具体来说,
COMPILE\u标志
。不,我不知道这个。我对cmake还很陌生。我会看看这个,谢谢。使用
设置目标属性(主要属性编译标志)-include../include/failing malloc test.h“
我已经解决了我的问题!谢谢你给我提示酒店的东西!如果你想继续把它作为一个答案,我会接受它。考虑使用<代码> TajyCopyILL选项< /C> >而不是<代码> TajyCopyILL定义这是“现代”的方法来解决你的问题。当然,这只会在支持<代码>的工具链上工作-包含选项,本质上是使构建不可移植。注意这一点!当然,这只适用于支持
-include
选项的工具链,基本上使构建不可移植。注意这一点!