- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 SCons 的新手,注意到当我在 SConscript 中构建共享库时,CCCOMSTR 和 LINKCOMSTR 将不起作用。
这是我的 SConstruct 的简化版本:
CFLAGS = ["-Wall", "-pedantic", "-std=c99"]
# building environment
env = Environment(CFLAGS = CFLAGS, CPPDEFINES = ["DEBUG"])
# checking dependencies
conf = env.Configure()
conf.CheckHeader("stdlib.h")
conf.CheckHeader("string.h")
conf.CheckLib("libdl")
env["CCCOMSTR"] = "Compiling $SOURCE ..."
env["LINKCOMSTR"] = "Linking $TARGET ..."
SConscript(dirs = ["lib1", "lib2"], exports=["env", "conf"], name = "SConscript")
# main function
env.Program(target = "prog", LIBS=["libdl"], source = Glob("*.c"))
库 SConscript 看起来像:
Import("env", "conf")
env.SharedLibrary(target = "test1", source = Glob("*.c"))
我的期望是 env["CCCOMSTR"]
和 env["LINKCOMSTR"]
应该通过导入传播并正确显示。然而,这并没有发生,我看到的是 gcc/clang 命令。在 SConscript 中设置这些变量也没有任何区别。
输出如下:
scons: Reading SConscript files ...
Checking for C header file stdlib.h... (cached) yes
Checking for C header file string.h... (cached) yes
Checking for C library libdl... (cached) yes
scons: done reading SConscript files.
scons: Building targets ...
Compiling log.c ...
Compiling main.c ...
clang -o lib1/test1.os -c -Wall -pedantic -std=c99 -g -fPIC -DDEBUG lib1/test1.c
clang -o lib1/libtest1.so -shared lib1/test1.os -ldl
clang -o lib2/test2.os -c -Wall -pedantic -std=c99 -g -fPIC -DDEBUG lib2/test2.c
clang -o lib2/libtest2.so -shared lib2/test2.os -ldl
Compiling xalloc.c ...
Linking prog ...
scons: done building targets.
这只是 SCons 错误还是我在这里做错了什么?在网上找不到太多关于它的信息,因此在这里问。 :)
(我试过并显示上述行为的 SCONS 版本是 v2.1.0、v2.3.4)
最佳答案
经过一些研究,我找到了答案,现在它正确显示了:
...
env["SHCCCOMSTR"] = "SHCC $SOURCE"
env["SHLINKCOMSTR"] = "SHLINK $TARGET"
env["CCCOMSTR"] = "CC $SOURCE"
env["LINKCOMSTR"] = "LINK $TARGET"
...
我以为我以前试过这个但没有用,但显然出了点问题,因为它现在可以用了。所以更改后的输出如下(符合预期):
...
CC log.c
CC main.c
SHCC lib1/test1.c
SHLINK lib1/libtest1.so
SHCC lib2/test2.c
SHLINK lib2/libtest2.so
CC util.c
CC xalloc.c
LINK prog
哦,好吧 - SCons 似乎工作正常,实际上非常棒!
关于SConscript 中 SharedLibrary 的 CCCOMSTR/LINKCOMSTR 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361666/
目前,我正在尝试将一个百万 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作为子公司
我是一名优秀的程序员,十分优秀!