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

lor*_*ara 2 c bash macros gcc 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
Run Code Online (Sandbox Code Playgroud)

但是,它似乎不喜欢"-D"选项,抱怨在-D之后缺少宏名称.我的印象是-D定义了一个新的宏(为1),其名称为指定的内容.我希望"OPTIMIZE"成为该宏的名称.任何提示?

Bas*_*tch 6

-D用胶水粘贴名称(即-DFOO-D FOO)

     gcc -c -std=c99 -Wall "-D$OPTIMIZE" -O2 code.c
Run Code Online (Sandbox Code Playgroud)

而你忘了传递-Wallgcc.它几乎总是有用的.

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