每次从源代码编译时,都会经历相同的3个步骤:
$ ./configure
$ make
$ make install
Run Code Online (Sandbox Code Playgroud)
我理解,将安装过程划分为不同的步骤是有道理的,但我不明白,为什么这个星球上的每个编码器必须一次又一次地编写相同的三个命令才能完成一个单独的工作.从我的角度来看./install.sh,使用包含以下文本的源代码自动交付脚本是完全合理的:
#!/bin/sh
./configure
make
make install
Run Code Online (Sandbox Code Playgroud)
人们为什么要分开做3个步骤?
我还是UNIX/Linux世界的新手,尤其是相关工具,比如GCC编译器.也就是说,我仍然是makefiles和类似的东西的新手(我在Windows上使用MinGW),因为到目前为止,我的大多数开发都是使用像Visual Studio和Eclipse这样的IDE.
当我打开一个典型的项目文件夹时,我看到这样的文件:
configure
make
INSTALL
install-sh (or a variant)
Run Code Online (Sandbox Code Playgroud)
这里有很多我不理解的东西,我的主要问题是:
这些之间有什么区别,为什么我们需要每一个?(在IDE世界中,你所拥有的只是一个项目文件;就是这样.所以我很困惑为什么我们这里不仅仅是一个makefile.)
这些文件是如何生成的?对于小型项目,您可以手工编写它们,但对于像GCC这样的大型项目,即使尝试也是荒谬的.我发现编辑这些文件很痛苦,我得出的结论是我不应该手动修改它们.但如果是这样,那么人们通常使用哪些工具来添加和修改这些文件?
为什么他们不在makefile中使用通配符?为什么每个目标文件都有一行?这是因为限制,还是有优势?
拥有一个调用编译器的shell脚本和每个文件,以及一个makefile做同样的事情有什么区别?在Windows中,我很想在文件夹中创建批处理文件,并使用它编译所有内容 - 不需要只有一个文件.有什么不同?为什么不只是一个.sh文件,编译一切?
奖金问题:
make工具不接受彼此的格式......我怎么知道使用什么?GCC只是通常的工具,还是每个人都应遵循一些标准?我可能会有更多问题,因为我对这类项目的结构有了更多了解,但就目前而言,这些是我最大的问题.:)