SConscript中的SharedLibrary的CCCOMSTR / LINKCOMSTR不起作用

我对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 bug或者我在这里做错了吗? 无法在网上找到关于它的更多信息,因此在这里问。 🙂

(我尝试过并显示上述行为的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似乎正常工作,实际上是岩石!