现在我不知道这是否就是它的名字,所以请原谅我的糟糕用语,如果我错了请纠正我,但我正在寻找一种方法来缩短这段代码:
gcc -o hello hello.m \
-I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` \
-L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
-lgnustep-base -fconstant-string-class=NSConstantString \
-D_NATIVE_OBJC_EXCEPTIONS
现在澄清一下,此代码允许我执行或构建/运行我构建的 Objective-C 程序。我花了一段时间才找到它,因为我以前在 Ubuntu 中编译 Objective-C 时遇到错误,但此代码有效。现在,如果绝对有必要,我不介意每次都输入它,但我觉得有一种更简单的方法。
那么,我是否可以将其推送到文本文件中,并将其保存为 gcc 执行或类似内容,然后只需输入一行即可:
./gcc execute
运行它然后./-name
只需obj-c
文件
它会运行我的程序吗?
现在我并不是在寻找那种形式的方法,它只是一个例子,有没有办法做类似的事情?
这会让事情变得更加方便,任何帮助都会受到赞赏!
答案1
回答部分问题:
首先,我使用“myDemoScript”而不是“gcc”,因为当您稍后从同名脚本调用 gnu c 编译器(GCC)时会产生混淆。
1)首先,不检查文件名的基本方法:
vim myDemoScript
i (insert mode on)
#!/usr/bin/env bash
gcc -o hello hello.m etc etc etc
ESC :wq
chmod +x myDemoScript
(使脚本可执行)。
之后,您只需使用 ./myscript 即可。
2)如果您使用 bash(或类似的 shell),则可以使用 $0、$1。
$0 将包含程序的名称(例如,在我的情况下为“myDemoScript”。)
$1 将包含第一个参数。
因此,如果你调用“./myDemoScript hello”,那么脚本中的 $1 将包含“hello”
#$/usr/bin/env bash
echo started the script $0 with $# arguments
echo going to work on the file $1
echo compiling $1.c to produce the output file $1
gcc -o $1 $1.c
(有关详细信息,请谷歌搜索“bash getopts”)
3)回答我将如何做:
对于编译作业:使用制作。
Make 对于将单个 c 文件编译为可执行文件来说有点过头了,但它是一个很好的学习工具,你可以用它做很多事情。如果你的项目包含多个文件,它也非常有用。特别是在文件很多或文件编译时间很长的情况下。
vim Makefile
i (insert mode on)
hello:
<TAB> gcc -o hello hello.m -I `gnustep-config \
--variable=GNUSTEP_SYSTEM_HEADERS` \
-L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
-lgnustep-base -fconstant-string-class=NSConstantString \
-D_NATIVE_OBJC_EXCEPTIONS
debug_hello:
<TAB> gcc -g -o hello hello.m -I `gnustep-config \
--variable=GNUSTEP_SYSTEM_HEADERS` \
-L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
-lgnustep-base -fconstant-string-class=NSConstantString \
-D_NATIVE_OBJC_EXCEPTIONS
clean:
<TAB> rm hello
ESC :wq (write and quit)
将此文件放在同一文件夹中,您只需发出“make hello”即可。
然后,Make 将在Makefile。
它将首先检查是否需要构建任何依赖项(示例中未使用任何依赖项),然后执行编译命令。
我添加了标签*debug_hello* 来演示其他选项:例如,通过-g
向 gcc 添加标志来构建同一程序的调试版本。
这干净的是另一个很好的例子。部分原因是它展示了非 GCC 功能。部分原因是当你的项目增长到包含数十个文件时,有一种方法可以清理一些东西,这非常好。
Make 可以做的远不止我刚才展示的这些,但这有点偏离主题了。如果你感兴趣的话,我建议你去谷歌搜索一下。