Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Sconstruct中的一些python语句没有执行?;_Python_Scons - Fatal编程技术网

为什么Sconstruct中的一些python语句没有执行?;

为什么Sconstruct中的一些python语句没有执行?;,python,scons,Python,Scons,文件夹中有多个c语言文件。我不想每次都编译所有的c文件。我写了一篇文章。我想使用一些选项来控制编译哪个文件 import os import sys input = sys.argv env = Environment(CC = 'gcc') env.Program('testC','cExample.c') 上述代码可以正常执行。但是下面的代码显示了scons:当我使用scons-cExample.c时,对cExample.c无需执行任何操作。未生成testC文件。我测试并发现它确实进入了i

文件夹中有多个c语言文件。我不想每次都编译所有的c文件。我写了一篇文章。我想使用一些选项来控制编译哪个文件

import os
import sys
input = sys.argv
env = Environment(CC = 'gcc')
env.Program('testC','cExample.c')
上述代码可以正常执行。但是下面的代码显示了scons:当我使用
scons-cExample.c
时,对
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没有成功编译。

如果键入:

import os
import sys
input = sys.argv
env = Environment(CC = 'gcc')
env.Program('testC','cExample.c')
scons cExample.c
假设这个文件没有生成,只是放在磁盘上,当然SCons会说

scons: Nothing to be done for `cExample.c'.
从cExample.c构建的文件将是cExample.o(或.obj或为对象设置的其他后缀)

因此:

将指示SCON仅生成该文件

用一个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

与问题无关:不要使用
input
作为变量,它是一个内置函数的名称。那么我应该如何获得scons设置的选项呢。例如,scons cExample.c。如何在Sconstruct中获取cExamplec.c。我只知道sys.argv[1]。只需为变量指定一个不同的名称。或者根本不使用变量:
如果sys.argv:
中的'cExample.c'如我所说,这与您遇到的问题无关,这只是编写Python脚本的一般要点:不要将内置函数的名称用作变量名。修改后问题仍然存在。如问题中所述,谢谢您的回答。但这似乎不起作用。它仍然显示了scons:对于'cExample.c'没有什么可以做的。我想直接编译并链接到一个可执行文件中file@cyj-我猜你错过了我上面的全部解释。对于已经存在且未动态生成的文件,任何生成系统都不会有任何应执行的操作。您可以构建对象文件,也可以构建可执行文件,在这种情况下,您应该在命令行上指定该目标。您定义的目标在一个生成器调用中-
程序
,因此
testC
。当您给scons一个非选项参数时,这就是要构建的目标。因此,在第二次调用中,您要求它构建已经存在的
cExample.c
。要将其传递用于其他目的,您需要将其包装,使其看起来不像目标。例如,见。