我正在尝试编写一个可以接受可选参数的bash脚本, 并根据该参数的值,使用该参数编译代码 作为预处理器指令。到目前为止,这是我的文件:
#!/bin/bash
OPTIMIZE="$1"
if[ $OPTIMIZE = "OPTIMIZE" ] then
echo "Compiling optimized algorithm..."
gcc -c -std=c99 -O2 code.c -D $OPTIMIZE
else
echo "Compiling naive algorithm..."
gcc -c -std=c99 -O2 code.c
fi
然而,它似乎不喜欢“-D”选项,抱怨在-D之后缺少宏名称。我的印象是-D定义了一个新的宏(为1),其名称为指定的内容。我希望“OPTIMIZE”成为该宏的名称。任何提示?
答案 0 :(得分:6)
-D
应粘贴到名称上(即-DFOO
而不是-D FOO
)
gcc -c -std=c99 -Wall "-D$OPTIMIZE" -O2 code.c
您忘了将-Wall
传递给gcc
。它几乎总是有用的。
顺便说一句,您可以考虑(即使是单个文件)使用make
和两个虚假目标:默认目标(例如plain
)和optimized
目标。