【问题标题】:Defining C++ Preprocessor macros with SCons使用 SCons 定义 C++ 预处理器宏
【发布时间】:2013-10-11 00:30:19
【问题描述】:

我正在尝试在 Scons 中定义一个预处理器宏来构建更大的 C/C++ 项目。

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

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

到该库的头文件,它编译得很好。但是,我应该能够在构建时指定它,因为这是库打算使用的方式。我知道在 CMake 中,我可以使用类似

的东西来定义宏
SET(ALIGN_DECL "__attribute__((aligned(x)))") 

像这样在Scons中定义常量

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

工作正常,但以这种方式定义 不起作用。 什么给了?

编辑:修正错字

【问题讨论】:

  • 您是如何尝试创建宏的?
  • 我省略了等号。添加它给我带来了另一个错误(在 shell 脚本中),但这很容易通过在字符的任一侧添加空格来解决。谢谢你的例子!

标签: c++ macros scons


【解决方案1】:

我可以在 Linux 上使用 g++ 做到这一点,如下所示:

SConscript

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

ma​​in.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

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 2021-12-29
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多