尝试在bash脚本中通过命令行传递预处理程序指令

时间:2014-03-16 09:22:16

标签: c bash gcc macros c-preprocessor

我正在尝试编写一个可以接受可选参数的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”成为该宏的名称。任何提示?

1 个答案:

答案 0 :(得分:6)

-D应粘贴到名称上(即-DFOO而不是-D FOO

     gcc -c -std=c99 -Wall "-D$OPTIMIZE" -O2 code.c

您忘了将-Wall传递给gcc。它几乎总是有用的。

顺便说一句,您可以考虑(即使是单个文件)使用make和两个虚假目标:默认目标(例如plain)和optimized目标。