我想在Scons中检查我的编译器是否支持某些选项(例如
-fcilkplus
)。我设法做到的唯一方法是以下顺序
操作:
env.Prepend(CXXFLAGS = ['-fcilkplus'], LIBS = ['cilkrts'])
然后我启动自定义检查器:
def CheckCilkPlusCompiler(context):
test = """
#include <cilk/cilk.h>
#include <assert.h>
int fib(int n) {
if (n < 2) return n;
int a = cilk_spawn fib(n-1);
int b = fib(n-2);
cilk_sync;
return a + b;
}
int main() {
int result = fib(30);
assert(result == 832040);
return 0;
}
"""
context.Message('Checking Cilk++ compiler ... ')
result = context.TryRun(test, '.cpp')
context.Result(result[0])
return result[0]
现在如果它失败了,我必须删除两个选项额外标志-fcilkplus
来自环境变量的cilkrts
。有没有更好的方法呢?
问题在于我无法从上下文中访问env
因此,我无法克隆它。
答案 0 :(得分:0)
您可以按如下方式使用check the availability of a library with SCons:
env = Environment()
conf = Configure(env)
if not conf.CheckLib('cilkrts'):
print 'Did not find libcilkrts.a, exiting!'
Exit(1)
else:
env.Prepend(CXXFLAGS = ['-fcilkplus'], LIBS = ['cilkrts'])
env = conf.Finish()
你也可以check the availability of a header如下:
env = Environment()
conf = Configure(env)
if conf.CheckCHeader('cilk/cilk.h'):
env.Prepend(CXXFLAGS = ['-fcilkplus'], LIBS = ['cilkrts'])
env = conf.Finish()
更新
我刚刚意识到,您可以按如下方式访问Configure对象上的环境:
conf.env.Append(...)