重复调用set_target_properties是否会覆盖CMake中目标属性的前一个值?

zysjyyx4  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(153)

我有一个CMake文件,其中包含以下命令:

set_target_properties(SM_Application PROPERTIES OUTPUT_NAME "Initial_Name.lib" PREFIX "" SUFFIX "")
...
set_target_properties(SM_Application PROPERTIES OUTPUT_NAME "New_Name.lib" PREFIX "" SUFFIX "")

第二次调用set_target_properties会改变属性OUTPUT_NAME吗?
我想自己调试一下,用message命令记录这个属性,如下所示:

message("Initialize output names for libs: ${SM_Application } ")

我不知道如何访问目标属性OUTPUT_NAME

shyt4zoc

shyt4zoc1#

set_target_properties
您可以使用任何需要的prop值对,并在以后使用get_property()get_target_property()命令提取它。
这将回答 * 如何使用message命令记录此属性?*
通过访问属性OUTPUT_NAME的设置值,可以确保第二个set_target_properties重写第一个set_target_properties

33qvvth1

33qvvth12#

要使用message打印目标属性,需要将其读入CMake变量,然后在message的内容参数中引用该变量。
此配置创建一个可执行目标,设置目标属性,将其读取到变量中,用message打印值,然后用不同的值重复。

cmake_minimum_required(VERSION 3.25)
project(hello_world)

add_executable(SM_Application main.cpp)
set_target_properties(SM_Application PROPERTIES OUTPUT_NAME "Initial_Name.lib" PREFIX "" SUFFIX "")
get_target_property(SM_Application_OUTPUT_NAME SM_Application OUTPUT_NAME)
message("SM_Application_OUTPUT_NAME: ${SM_Application_OUTPUT_NAME}")
set_target_properties(SM_Application PROPERTIES OUTPUT_NAME "New_Name.lib" PREFIX "" SUFFIX "")
get_target_property(SM_Application_OUTPUT_NAME SM_Application OUTPUT_NAME)
message("SM_Application_OUTPUT_NAME: ${SM_Application_OUTPUT_NAME}")

输出:

...
SM_Application_OUTPUT_NAME: Initial_Name.lib
SM_Application_OUTPUT_NAME: New_Name.lib
...

所以是的,重复调用set_target_properties会覆盖以前的值。如果你想追加而不是覆盖,请使用更通用的set_property(TARGET),它有一个APPEND选项(但不允许在同一个调用中设置多个属性)。

相关问题