2013-10-11 7 views
5

Ich versuche ein Präprozessor-Makro innerhalb von Scons zu definieren, um ein größeres C/C++ - Projekt zu erstellen.Definieren von C++ - Präprozessor-Makros mit SCONs

Eine der Bibliotheken, die ich verwende, benötigt ALIGN definiert. Um genauer zu sein, wenn ich die Header-Datei der Bibliothek

hinzufügen, kompiliert es fein. Allerdings sollte ich in der Lage sein, dies zum Zeitpunkt der Erstellung anzugeben, da dies der Verwendungszweck der Bibliothek ist. Ich weiß, in CMake, würde ich in der Lage sein, das Makro so etwas wie

SET(ALIGN_DECL "__attribute__((aligned(x)))") 

definieren Konstanten in Scons wie diese

myEnv.Append(CPPDEFINES = ['IAMADEFINEDCONSTANT']) 

funktioniert gut, aber definine ein Makro auf diese Weise mit definieren funktioniert nicht. Was gibt?

Edit: Fest Typo

+0

, wie Sie das Makro erstellen versuchte? – Brady

+0

Ich unterließ das Gleichheitszeichen. Das Hinzufügen hat mir einen weiteren Fehler (in einem Shell-Skript) gebracht, aber das wurde leicht gelöst, indem man Whitespace zu jeder Seite des Charakters hinzufügte. Danke für das Beispiel! – TSeabrook43

Antwort

6

Ich konnte es auf Linux mit g tun ++ wie folgt:

SConscript

env = Environment() 
env.Append(CPPDEFINES=['MAX(x,y)=(x>y ? x:y)']) 
env.Program(target = 'main', source = 'main.cc') 

main.cc

#include <iostream> 

using namespace std; 

int main(int argc, char **argv) 
{ 
    int a = 3; 
    int b = 5; 

    // MAX() will be defined at compile time 
    cout << "Max is " << MAX(a, b) << endl; 
} 

Compilation

$ scons 
scons: Reading SConscript files ... 
scons: done reading SConscript files. 
scons: Building targets ... 
g++ -o main.o -c "-DMAX(x,y)=(x>y ? x:y)" main.cc 
g++ -o main main.o 
scons: done building targets. 

Execution

./main 
Max is 5