我们实现了一个日志记录器,它可以自动打印出日志条目的项目名称以及其他信息。
我们最近将构建系统从使用原生Microsoft Visual C改为使用cmake生成。
对于原生Microsoft C构建文件,我们只是在全局“.props”中定义了一个宏“PROJECT_NAME”,如下所示:<PreprocessorDefinitions>%(PreprocessorDefinitions);PROJECT_NAME=R"($(ProjectName))"</PreprocessorDefinitions>
但是,现在我们使用了CMake,我很难找到一种在编译时访问项目名称的好方法。我可以使用configure_file或target_compile_definitions在编译时访问CMake变量,但我不知道有任何变量包含具有目标名称的字符串。是否存在这样的变量,或者是否可以定义它?
另外,它只能在一个地方定义吗?我不想在每个CMakeList.txt中复制粘贴一行这样的内容:target_compile_definitions(MYTARGET PRIVATE PROJECT_NAME="$mytarget_name")
1条答案
按热度按时间4xrmg8kj1#
如果您有多个选项要应用于所有目标,则可以链接一个
INTERFACE
库,该库允许您通过一次target_link_libraries
使用来继承此cmake目标的多个属性。对于使用链接目标的名称,可以使用不需要指定目标的生成器表达式:
@Tsyvarevs注解中提到的另一个选项是使用
add_compile_definitions
将定义应用于当前目录和子目录中定义的所有目标,但这会使从某些目标中删除它变得更加困难...