问题描述
一个文件夹中有多个c语言文件。我不想每次都编译所有c文件。我写了一个Sconstruct。我想使用一些选项来控制编译哪个文件。
import os
import sys
input = sys.argv
env = Environment(CC = 'gcc')
env.Program('testC','cExample.c')
以上代码可以正常执行。但是以下代码显示了错误:我使用cExample.c
时scons cExample.c
不需要做任何事情。未生成testC文件。我进行了测试,发现它确实输入了if语句
import os
import sys
env = Environment(CC = 'gcc')
# env.Program('testC','cExample.c')
if 'cExample.c' in sys.argv:
print('here')
env.Program('testC','cExample.c')
它仍然显示
scons: nothing to be done for `cExample.c'.
scons: done building targets.
对不起您没有解释清楚。这段代码写在一个Sconstruct文件中。它的功能类似于MakeFile文件。句子env.Program('testC','cExample.c')是将cExample.c编译成一个testC可执行文件。如果将env.Program('testC','cExample.c')放在if外部(如注释的第四行),则cExample.c可以正常编译,如果它位于if内部(如现在所示),则cExample .c未成功编译。
解决方法
如果您输入:
scons cExample.c
假设未生成文件,而只是坐在磁盘上,SCons当然会说
scons: Nothing to be done for `cExample.c'.
从cExample.c构建的文件将是cExample.o(或为对象设置的.obj或其他后缀)。
所以:
scons cExample.o
将指示SCons仅构建该文件。
使用SConstruct作为
env = Environment(CC = 'gcc')
my_obj = env.Object('cExample.c')
env.Alias('myobject',my_obj)
env.Program('testC',my_obj)
然后您可以运行
scons myobject
那只会编译您的.c-> .o