Cmake 宏()不执行字符串替换?

Cmake 宏()不执行字符串替换?,cmake,Cmake,我正在尝试使用macro()命令替换不区分上下文的字符串,但是: cmake_minimum_required(VERSION 2.8) MACRO(TestMacro mystring) message(mystring) endmacro() TestMacro("hello world") message("hello world") 产出: mystring 你好,世界 而不是 你好,世界 你好,世界 正如我所料。有人知道我做错了什么吗?尝试取消对宏参数的引用: MACRO(

我正在尝试使用macro()命令替换不区分上下文的字符串,但是:

cmake_minimum_required(VERSION 2.8)

MACRO(TestMacro mystring)
  message(mystring)
endmacro()

TestMacro("hello world")

message("hello world")
产出:

mystring 你好,世界

而不是

你好,世界 你好,世界


正如我所料。有人知道我做错了什么吗?

尝试取消对宏参数的引用:

MACRO(TestMacro mystring)
  message(${mystring})
endmacro()

另请参见。

尝试取消对宏参数的引用:

MACRO(TestMacro mystring)
  message(${mystring})
endmacro()

另请参见。

该取消引用的参数是否可以与其他文本连接?例如,我真正想做的是创建一个名为MyArgumentLibs的变量。如果我执行宏(TestMacro MyArgument)set(${MyArgument}Libs“something”)endmacro()TestMacro(David),这是我所期望的吗?(即,与set(DavidLibs“something”)相同?正如您所描述的,它看起来更像是一个传递变量的普通函数,而不是C风格的#-宏意义上的真正“宏”,实际上它只是盲目地用另一个字符串替换一个字符串。是的。使用与您所描述的完全相同的东西:set(${value}u Blah“value”)@道格-那么当我想得到DavidLibs的值时,我必须做${{MyArgument}Libs}?宏(Test key value)集(${key}LIB${value})endmacro()测试(“Hello”“World”)消息(${Hello”“LIB})-->“World”。如果你有一个键的变量,你也可以去测试(${mykey}“World”)消息(${mykey}LIB好的,这也可以:宏(Test key)set(${key}{u-LIB“SomeValue”)message(${key}{u-LIB})endmacro()Test(“HelloWorld”)输出是:SomeValue谢谢大家。然后这个被取消引用的参数可以与其他文本连接吗?例如,我真正想做的是创建一个名为MyArgumentLibs的变量。如果我执行MACRO(TestMacro-MyArgument)set(${MyArgument}Libs“something”)endmacro()TestMacro(David)这是我所期望的吗?(即与set(DavidLibs“something”)相同?正如您所描述的,它看起来更像是一个传递变量的普通函数,而不是一个真正的“宏”在C风格的#-宏的意义上,它实际上只是盲目地用另一个字符串替换一个字符串。是的。使用与您所描述的完全相同的东西:set(${value}{u Blah“value”)@Doug-因此,当我想获得DavidLibs的值时,我必须执行${MyArgument Libs}宏(测试键值)set(${key}{LIB value})endmacro()测试(“Hello”“World”)消息(${Hello_LIB})->“World”。如果您有一个变量作为键,您也可以去测试(${mykey}“World”)消息(${mykey}}LIB)好的,这也有效:宏(测试键)集(${key}LIB“SomeValue”)消息(${{{key}LIB})endmacro()测试(“HelloWorld”)输出是:SomeValue谢谢大家。