5

大規模な C/C++ プロジェクトをビルドするために、Scons 内でプリプロセッサ マクロを定義しようとしています。

私が使用しているライブラリの 1 つは、ALIGN を定義する必要があります。さらに具体的に言うと、

#define ALIGN(x) __attribute((aligned(x)))

上記のライブラリのヘッダーファイルに追加すると、正常にコンパイルされます。ただし、これがライブラリの使用方法であるため、ビルド時にこれを指定できるはずです。CMakeでは、次のようなものを使用してマクロを定義できることを知っています

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

このようにSconsで定数を定義する

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

正常に動作しますが、この方法でマクロを定義すると機能しません。何を与える?

編集:タイプミスを修正

4

1 に答える 1

8

次のように、g ++を使用してLinuxで実行できました。

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;
}

コンパイル

$ 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.

実行

./main
Max is 5
于 2013-10-11T12:06:38.813 に答える