- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我刚开始看scons
我创建了一个简单的test.cpp
#include <iostream>
int main(int argc, char ** argv) {
std::cout << "Hello World\n";
return 0;
}
并给它一个 SConstruct 文件
env = Environment()
env.Program(target='Hello', source=['test.cpp'])
并且编译完美
g++ -o test.o -c test.cpp
g++ -o Hello test.o
现在,我将这个 Sconstruct 文件的内容转移到一个 SConscript 文件中并将以下内容输入 SConstruct
SConscript('SConscript', variant_dir='.build_release', duplicate=0, exports={'MODE':'release'})
SConscript('SConscript', variant_dir='.build_debug', duplicate=0, exports={'MODE':'debug'})
并且 scons 选择 GCC 而不是 g++
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: .build_release .build_debug
gcc -o .build_debug/Hello test.o
Undefined symbols for architecture x86_64:
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test.o
接着是一页半以上的错误。
如果我将 gcc 替换为 g++ 并从命令行运行,它会再次完美运行。
任何人都可以解释为什么它从 g++ 更改为 gcc 以及我应该做什么?
最佳答案
您需要使用 exports=["env"].. 将 SConstruct 环境传播到 SConscript。
例如在 SConstruct 中:
env = Environment(CFLAGS = CFLAGS, CPPDEFINES = [])
conf = env.Configure()
vars = Variables()
vars.AddVariables(
BoolVariable("verbose", "Set to show compilation lines", False),
BoolVariable("release", "Set to make a release build", False),
EnumVariable("flavour", "Choose a build flavor", "debug",
allowed_values = ("release","debug"),
ignorecase = 2),
PathVariable("CC", "The C compiler", "clang", PathVariable.PathAccept),
PathVariable("CXX", "The C++ compiler", "clang++", PathVariable.PathAccept),
)
vars.Update(env)
SConscript(dirs = dirs, exports=["env", "conf"], name = "SConscript")
在 SConscript 中:
Import("env", "conf")
env.Program(target='Hello', source=['test.cpp'])
在此之后,在 SConstruct 中配置的所有设置也将与 SConsript 相同。
请看我的other post for bigger example .
希望对您有所帮助。
编辑:我看到评论中已经回答了这个问题。有趣并感谢您提供的信息。
关于c++ - Scons 在使用 SConscript 文件时更改编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303542/
目前,我正在尝试将一个百万 sloc 遗留项目从乏味的 .cmd 脚本移植到 SCons。其中一部分是VC++,其他是Delphi。为 C++ 片段创建 SConscript 是一件轻而易举的事。 为
我有一个 SConscript,它被复制到构建目录 (variant_dir = ...) 进行构建。作为 not being able to express dependencies 的解决方法,我
我正在使用 scons 来编译我的项目。在我的项目中,源文件位于不同的目录中。我们是否需要在每个目录中都有 sconscript 文件来编译这些项目源文件? 我试图用单个 sconscript 文件编
我在网上找不到任何信息,所以我恳请您提供一个。 我已经正确设置了构建环境, 我的编译器是来自 VS Express 包的“cl”。 我尝试构建静态库, 当我将我的工具设置为“默认”时,一切正常,但当我
我正在尝试编写一个 SConscript 文件,以便我可以使用 scons 构建 Go 代码。 SConscript 文件非常简单;它只是一个入门文件: def gc(source, target,
作为 scons 的新手,我面临着使用通用顶级构建在一个存储库中转换具有多个模块的项目。每个模块已经有一个 SConstruct 文件 - 允许自己构建它们。 阅读分层 scons 设置,我发现这个想
我刚开始看scons 我创建了一个简单的test.cpp #include int main(int argc, char ** argv) { std::cout >& std::__1
我正在尝试使用 scons 构建工具构建一个简单的打印 HelloWorld。 我的 helloWorld.c 文件包含: #include "stdio.h" int main() { printf
我正在使用 SCons 构建一个非常大的项目,其中包含许多可构建的子项目。我可以轻松地使用关键字命令,如 scons group=ai 来构建带有 if 语句的 AI 子项目(根据关键字命令选择正确的
我需要使用 scons 为大型项目生成发布和调试版本。对于发布和调试版本,它都会生成共享和静态库。构建后目录结构应如下所示: project_dir/ |_ src |_ include
我是 SCons 的新手,注意到当我在 SConscript 中构建共享库时,CCCOMSTR 和 LINKCOMSTR 将不起作用。 这是我的 SConstruct 的简化版本: CFLAGS =
我正在处理一个项目,该项目有许多使用 SConscript(variant_dir=) 创建的变体目录。 我想让 scons 停止软链接(soft link)/硬链接(hard link)/将我的 .
我的构建结构如下: SConstruct subdir/SConscript subdir/module/__init__.py SConstruct调用 subdir/SConscript作为子公司
我是一名优秀的程序员,十分优秀!