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

标签 makefile conditional-statements 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)

我使用以下命令行执行:make X=0.1 Y=0.1 SPOneDot,但我得到以下结果:

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

我查看了 makefile documentation并看到others use it 。任何帮助表示赞赏,这可能是愚蠢的。

最佳答案

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

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

ifeq ($(CC),gcc)
        $(CC) -o foo $(objects) $(libs_for_gcc)
else
        $(CC) -o foo $(objects) $(normal_libs)
endif

GNU make manual有所有详细信息。

如果您确实想测试环境变量(而不是ma​​ke变量),那么只需在命令中执行即可:

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 的单个命令,因此需要分号和反斜杠/换行符。

关于makefile - 检查 makefile 中是否定义了变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16722480/

相关文章:

c# - 如何引用C :\Users\Public directory programmatically in C#

python-2.7 - 如何在arch linux中用python 2完全替换python 3

c - 如何将新文件添加到现有的 makefile 项目

python - 在cygwin中安装python和make

c++ - if-else 语句中的条件被错误地评估

java - Spring environment.getProperty 无法解析

c++ - Automake 变量整理 Makefile.am

c++ - 为什么文件命令报告动态与 gcc -static 链接

c# - 根据 C# 中的条件保护临界区

php - yii2 - 如何使用条件逻辑使复选框可见