UNIX 定制 Shell 脚本/命令

UNIX 定制 Shell 脚本/命令

我正在习惯使用命令行界面(linux 等),并且遇到如下命令:

git [命令]

..例如

git 推送

我有一个项目(用 C++ 开发),想知道它是否可以创建自定义命令,例如:

(假设我的项目名为“MyProject”):

我的项目编译

然后哪个会执行gcc编译命令?

注意:我知道可以创建自己的命令,例如“编译”,但我想创建具有“参考”和“命令”的命令。

答案1

一旦掌握了窍门,比 shell 脚本编写更简单的方法就是使用制作,您之前可能已经看到过参考。

一个极其简单的 makefile 可能如下所示:

myproject: myproject.cpp
    g++ myproject.cpp -o myproject

如果未指定,默认情况make下会选择第一个目标,因为在这种情况下只有一个目标,它将执行您在其中看到的操作。目标是冒号之前的标签(myproject);冒号之后是先决条件目标。如果这些目标未列出,则假定它们是文件。在这种情况下,如果 myproject.cpp 自 myproject 目标的输出(“myproject”二进制文件)以来没有更改,则 make 不执行任何操作。如果有,它会重新编译。

随着事情变得更加复杂,make 的使用价值也变得更加清晰:

flags = -Wall -g -O2

myproject: myproject.h myproject.cpp somepart.o
    g++ $(flags) somepart.o myproject.cpp -o myproject

somepart.o: somepart.h somepart.cpp
    g++ $(flags) -c somepart.cpp -o somepart.o

.h 文件是先决条件,因为如果您更改一个文件,您需要重新编译需要它的部分。所以现在你可以make somepart.o只编译对象,或者你可以make使用第一个目标(myproject),它需要最新的“somepart.o”,所以如果它不可用,它将使所有这些也。

使用 bash 脚本来做到这一点并不那么容易,这可能就是make出现的原因。不幸的是,“掌握窍门”可能需要一些时间。 l0b0 已经链接到此:

http://www.gnu.org/software/make/manual/make.html

首先要注意,make 对空格敏感,尤其是在使用实际制表符而不是空格时。

答案2

为此,您通常会使用make compile,但您可以通过创建一个名为 的脚本来轻松地自己创建一个脚本,MyProject该脚本检查$1预设的子命令列表:

case "$1" in
    compile)
        my_compile_command(s)
        shift
        ;;
    *)
        echo "$0: Unknown command: $1"
        exit 1
        ;;
esac

参考:

答案3

最好保留标准命令。即,make编译您的项目,等等。合作者更容易接手,很多更容易设置,需要记住的随机内容更少(或在下一台机器/项目上设置)。您将从事的大多数项目都不是您自己的,并且保留该机器作为它们的补丁会带来很多麻烦。

相关内容