【发布时间】:2011-07-20 07:50:36
【问题描述】:
我还是 UNIX/Linux 世界的新手,尤其是 GCC 编译器等相关工具。也就是说,我对 makefile 和类似的东西还是新手(我在 Windows 上使用 MinGW),因为到目前为止,我的大部分开发都是使用 Visual Studio 和 Eclipse 等 IDE。
当我打开一个典型的项目文件夹时,我会看到如下文件:
configure
make
INSTALL
install-sh (or a variant)
这里有很多我不明白的地方,我的主要问题是:
这些有什么区别,为什么我们需要每一个? (在 IDE 世界中,您所拥有的只是一个项目文件;仅此而已。所以我很困惑为什么我们这里不只是一个 makefile。)
这些文件是如何生成的?对于小型项目,您可能可以手动编写它们,但对于像 GCC 这样的大型项目,即使尝试也是荒谬的。我发现编辑这些文件很痛苦,我得出的结论是我不应该手动修改它们。但如果是这样,那么人们通常使用哪些工具来添加和修改这些文件?
他们为什么不在 makefile 中使用通配符?为什么每个目标文件都有一行?这是因为限制,还是有好处?
拥有一个对每个文件调用编译器的 shell 脚本与拥有一个执行相同操作的 makefile 之间有什么区别?在 Windows 中,我很想在文件夹中创建一个批处理文件,然后用它编译所有内容——不需要多个文件。有什么不同?为什么没有一个
.sh文件来编译所有内容?
额外问题:
- 是否有“标准”makefile 格式?我见过不同的
make工具不接受彼此的格式......我怎么知道该使用什么? GCC 只是这里常用的工具,还是每个人都应该遵循的标准?
随着我更多地了解此类项目的结构,我可能会有更多问题,但就目前而言,这些是我最大的问题。 :)
【问题讨论】:
-
有诸如 automake 之类的工具可以为您生成其中的一些文件。
configure通常会查看当前系统并修改程序的构建方式以适应系统。出于几个原因,单独的文件被赋予单独的行。只有文件被修改后才会重新编译。不同的 gcc 实例可以在不同的处理器上运行,甚至可以使用 distcc 等工具在不同的机器上运行。我敢肯定还有其他原因。 Make 只处理编译源文件(通常)与安装(复制到最终目的地)作为一个单独的步骤。