两行shell脚本

时间:2013-10-12 23:24:43

标签: xcode bash build-process

我对shell脚本没有任何了解但是有些东西出现了,我需要能够理解两行代码的作用,以便我可以修改我正在处理的项目

SDKROOT= make -C $TEMP_DIR -f $PROJECT_DIR/greg/Makefile VPATH=$PROJECT_DIR/greg || exit $?
$TEMP_DIR/greg -o $DERIVED_FILES_DIR/${INPUT_FILE_BASE}.m $INPUT_FILE_PATH

请您解释一下这两行代码的作用......我知道变量是什么以及路径名,但其余的语法是混乱的和外来的。请帮忙。

1 个答案:

答案 0 :(得分:1)

第一行:

SDKROOT= make -C $TEMP_DIR -f $PROJECT_DIR/greg/Makefile VPATH=$PROJECT_DIR/greg || exit $?
  • SDKROOT=将环境变量SDKROOT设置为空,以执行make命令。
  • make是构建工具,它使用以下选项运行:
    • -C $TEMP_DIR:表示在make
    • 目录中运行$TEMP_DIR
    • -f $PROJECT_DIR/greg/Makefile指定make使用$PROJECT_DIR/greg中的Makefile
    • VPATH=$PROJECT_DIR/greg将另一个变量VPATH设置为$PROJECT_DIR/gregVPATH指定make a search path for prerequisits
  • || exit $?表示如果make命令失败,则脚本应使用与make相同的错误代码退出,因为$?表示的返回代码上次运行程序/命令

第二行:

$TEMP_DIR/greg -o $DERIVED_FILES_DIR/${INPUT_FILE_BASE}.m $INPUT_FILE_PATH

似乎正在运行带有$TEMP_DIR/greg选项的-o $DERIVED_FILES_DIR/${INPUT_FILE_BASE}.m命令以及来自$INPUT_FILE_PATH的一些输入。这看起来像是可能是从前一行的make命令构建的程序,所以很难确切知道它的作用。

修改

SDKROOT是一个环境变量,由XCode用来说明它所使用的SDK的安装位置。例如,它将是/Developer/SDKs/MacOSX"${HOST_VERSION}".sdk/之类的路径。该值应该在我想象的XCode中设置(我没有使用xcode,所以不能比这更有帮助。)。通过在命令开头执行SDKROOT=SDKROOT的值将为空/空。原因是编译的代码将使用SDKROOT中存在的资源,而不是本地资源;例如,这些资源可以是类,配置或库。