字符串化CMake预处理器令牌

字符串化CMake预处理器令牌,c,string,cmake,c-preprocessor,token,C,String,Cmake,C Preprocessor,Token,我正在使用CMake编译这个示例程序: CMakeLists.txt: cmake_minimum_required (VERSION 3.0.0) set(PROJECT_NAME Main) project(${PROJECT_NAME}) add_definitions(-DSTRING=“test”) add_executable(${PROJECT_NAME} main.c) #include <stdio.h> int main(void) { puts(

我正在使用CMake编译这个示例程序:

CMakeLists.txt

cmake_minimum_required (VERSION 3.0.0)
set(PROJECT_NAME Main)
project(${PROJECT_NAME})

add_definitions(-DSTRING=“test”)

add_executable(${PROJECT_NAME} main.c)
#include <stdio.h>

int main(void)
{
    puts(STRING);
}
main.c

cmake_minimum_required (VERSION 3.0.0)
set(PROJECT_NAME Main)
project(${PROJECT_NAME})

add_definitions(-DSTRING=“test”)

add_executable(${PROJECT_NAME} main.c)
#include <stdio.h>

int main(void)
{
    puts(STRING);
}
#包括
内部主(空)
{
放置(字符串);
}

编译时出现以下错误:

错误:应为表达式
放置(字符串);
^
:1:16:注意:从此处展开
#定义字符串“test”

如何在不修改
main.c
的情况下对该预处理器令牌进行字符串化?

您使用的字符
在c中无效:

error: expected expression
        puts(STRING);
         ^
<command line>:1:16: note: expanded from here
#define STRING “test”
           ^
1 error generated.
错误:应为表达式
放置(字符串);
^
:1:16:注意:从此处展开
#定义字符串“test”
^
生成1个错误。

您必须更改CMakeLists.txt中的
”,然后您的程序将进行编译。

我希望您没有在CMakeLists.txt中实际使用“智能引号”,尽管您的示例显示了它们:
-DSTRING=“test”
我使用的那些引号是我的Mac电脑键入的,您建议如何将它们更改为您的引号样式?一个选项就是复制并粘贴此
@syb0rg可能取决于您的编辑器,看起来这是一个常见功能。。。可能是键盘的配置:这不是一个“解决办法”。问题在于你的键盘或任何用于编辑的应用程序,而不是Cmake。