2016-07-06 20 views
3

Ich verwende CMake dieses Beispielprogramm zu kompilieren:Stringify CMake Präprozessor-Token

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) 

main.c:

#include <stdio.h> 

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

Compiling gibt mir den folgenden Fehler:

error: expected expression 
    puts(STRING); 
     ^
<command line>:1:16: note: expanded from here 
#define STRING "test" 

Wie kann ich diese Präprozessor-Token stringify ohnemain.c zu modifizieren?

+0

Ich hoffe, Sie verwenden nicht wirklich "intelligente Anführungszeichen" in CMakeLists.txt, obwohl Ihr Beispiel zeigt ihnen: '-DSTRING =" test "' – librik

Antwort

3

Sie verwenden die Zeichen und , die nicht gültig in C:

error: expected expression 
     puts(STRING); 
     ^
<command line>:1:16: note: expanded from here 
#define STRING “test” 
     ^
1 error generated. 

Sie müssen und für " in Ihrem CMakeLists.txt ändern und Ihr Programm kompilieren.

+0

Die Zitate, die ich verwendete, sind was mein Mac ausgibt, wie empfehlen Sie Wechsel sie zu Ihrem Zitat-Stil? – syb0rg

+0

Eine Option ist nur Kopieren und Einfügen dieser '" '. – chema989

+0

Das ist eher eine Problemumgehung, keine Lösung – syb0rg