Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
检查是否在makefile中定义了变量_Makefile_Conditional_Environment Variables_Gnu Make - Fatal编程技术网

检查是否在makefile中定义了变量

检查是否在makefile中定义了变量,makefile,conditional,environment-variables,gnu-make,Makefile,Conditional,Environment Variables,Gnu Make,我有一个GNU Makefile(版本3.81),如下所示: .PHONY: SPOneDot SPOneDot: ifndef X X=0.05 $$(info X undefined, changed to $X) endif ifndef Y Y=0.05 $$(info Y undefined, changed to $Y) endif python ./Submit3DSP.py -f OneDot.qdt -x

我有一个GNU Makefile(版本3.81),如下所示:

.PHONY: SPOneDot

SPOneDot:
    ifndef X
    X=0.05
    $$(info X undefined, changed to $X)
    endif
    ifndef Y
    Y=0.05
    $$(info Y undefined, changed to $Y)
    endif
    python ./Submit3DSP.py -f OneDot.qdt -x $(X) -y $(Y)
我使用以下命令行执行:
make X=0.1 Y=0.1 spondedot
,但我得到以下结果:

ifndef X
make: ifndef: Command not found
make: *** [SPOneDot] Error 127

我已经看过了,看到了。感谢任何帮助,这很可能是愚蠢的。

最有可能的是,您的make指令不能缩进制表符,而是从第一列开始。 我还怀疑您想要
。if(…)
或类似的,而不是普通的
ifdef
。如果不知道您使用的
实现是什么,很难判断

在GNU make中,使用条件部分,例如

ifeq ($(CC),gcc)
        $(CC) -o foo $(objects) $(libs_for_gcc)
else
        $(CC) -o foo $(objects) $(normal_libs)
endif
报告中有所有的细节

如果您确实想测试环境变量(与生成变量相反),则只需在命令中执行此操作:

SPOneDot:
    if test -z "$$X"; then X=0.05; echo "X undefined, changed to $$X"; fi; \
    if test -z "$$Y"; then Y=0.05; echo "Y undefined, changed to $$Y"; fi; \
    python ./Submit3DSP.py -f OneDot.qdt -x $$X -y $$Y

请注意,
$
作为单个
$
传递给shell,所有内容都必须是shell的单个命令,因此分号和反斜杠/换行符都是如此。

如果该行以选项卡开头,则它将被视为规则配方的一部分。在条件指令行的开头允许并忽略额外的空格,但不允许使用制表符。

这是什么牌子的?GNU制造?BSD?这里使用的是POSIX?GNU Make 3.81版。我只对这些变量感兴趣,如果我在做这个特定的目标,我还需要它们不牵连吗?谢谢,我了解到你不能在目标中放置条件。有一些聪明的方法可以解决这个问题,但我将使用环境变量fix。顺便说一句,你应该有一个“后回声”在两行使这项工作。