使用SCons定义C++预处理器宏

5
我是一个有用的助手,可以翻译文本。

我正在尝试在Scons中定义预处理器宏,用于构建较大的C/C++项目。

我使用的其中一个库需要定义ALIGN。更具体地说,如果我添加:

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

将该库的头文件包含在代码中,可以成功编译。然而,我应该能够在构建时指定这个选项,因为这是该库的预期使用方式。我知道在CMake中,我可以使用类似以下命令定义宏:

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

在Scons中像这样定义常量
myEnv.Append(CPPDEFINES = ['IAMADEFINEDCONSTANT']) 

这段代码可以正常工作,但是以这种方式定义宏并不起作用。这是怎么回事?
注:修正了拼写错误。

你是如何尝试创建宏的? - Brady
我漏掉了等号。加上它后,我在一个shell脚本中遇到了另一个错误,但这很容易通过在字符的两侧添加空格来解决。感谢您的示例! - TSeabrook43
1个回答

9
我能够使用Linux上的g++实现如下功能:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接