Tro*_*ood 17 conditional makefile 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 $(X) -y $(Y)
Run Code Online (Sandbox Code Playgroud)
我使用以下命令行执行:make X=0.1 Y=0.1 SPOneDot但是我得到以下结果:
ifndef X
make: ifndef: Command not found
make: *** [SPOneDot] Error 127
Run Code Online (Sandbox Code Playgroud)
我查看了makefile文档,看到其他人使用它.任何帮助表示赞赏,这可能是愚蠢的.
Jen*_*ens 21
很可能你的make指令不能缩进制表符,而是从第一列开始.我也怀疑你想要.if(...)或类似,不平凡ifdef.在不知道make你使用什么实现的情况下很难分辨.
在GNU make中,使用条件部分,例如像这样
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
Run Code Online (Sandbox Code Playgroud)
在GNU使手册具有所有的细节.
如果你真的想测试环境变量(而不是make变量),那么只需在命令中执行:
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
Run Code Online (Sandbox Code Playgroud)
请注意,$$它作为单个传递给shell,$并且所有内容都必须是shell的单个命令,因此是分号和反斜杠/换行符.
| 归档时间: |
|
| 查看次数: |
30703 次 |
| 最近记录: |