1
65
这是我的一个项目的已切碎的makefile,它编译“src”中的源文件,并将.o文件放在“obj”目录中。关键点是使用patsubst()函数-有关详细信息,请参阅GNU make手册(实际上这是一个非常好的阅读):
|
2
15
如何更改到目录并从中运行编译:
就是这样。GCC将解释表格的内容。
|
3
12
一个简单但有效的解决方法是在生成文件中的gcc调用之后添加以下内容:
甚至一个 软清洁 (可能是递归的)编译完成后,比如
或
|
4
10
你可以用一个简单的包装
这里是这样的
当然,标准的方法是用
|
5
4
我相信你把概念倒过来了…?! makefiles背后的思想是,它们只处理自上次构建以来更新的文件,以减少(重新)编译时间。如果在一个编译器运行中将多个文件组合在一起,那么基本上就无法实现这一目标。 你的例子:
您没有给出与此命令行匹配的“make”规则;但是如果 任何 在三个文件中,您必须运行此行并重新编译 三都 可能根本不需要的文件。它还防止“make”为每个源文件生成单独的编译过程,就像它对单独的编译所做的那样(当使用'-j'选项时,正如我强烈建议的那样)。 我写了一篇 Makefile tutorial 在其他地方,这涉及到一些额外的细节(例如自动检测源文件,而不是在makefile中硬编码源文件,自动确定包含依赖项,以及内联测试)。
要获得单独的对象目录,您所要做的就是将适当的目录信息添加到
(如果您要使用教程中描述的depfiles或testfiles,则必须调整
|
6
1
我认为告诉pass gcc并没有单独的选项来说明将对象文件放在哪里,因为它已经有了对象文件。它是“-c”,表示将对象放在哪个目录中。 只有目录的附加标志才能更改“-c”的会议。 例如:
不能将/a/b/c/file.o放在/a1/a2/a3下,因为这两个路径都是绝对路径。因此,应该将“-c”更改为仅命名对象文件。 我建议你考虑替换makefile,比如 cmake , scons 以及其他。 这将使构建系统既可以用于简单的项目,也可以用于更大的项目。 例如,请参阅如何使用cmake示例轻松编译。 只需在srcdir/中创建文件cmakelist.txt即可:
现在类型:
仅此而已,对象文件将驻留在builddir/objdir下的某个位置。 我个人使用CMAKE,发现它非常方便。它自动生成依赖关系并具有其他优点。 |
7
1
同时,我通过使用-combine选项找到了一个“中途”解决方案。 例子:
这个“组合”所有源文件成一个单一的对象文件。 但是,这仍然是“中途”,因为只有一个源文件更改时,它需要重新编译所有内容。 |
8
0
这是问题之一 autoconf 解决。
如果你做过
这个
如果有源文件正在执行
autoconf不完全正确 容易的 尤其是对于现有的大型项目。但它有它的优势。 |
user8659414 · Make无法识别我的库! 6 年前 |
Hei · Linux上写入共享内存的周期性延迟峰值 6 年前 |
Zach Saw · 将函数作为模板参数传递[重复] 6 年前 |
Oberon311 · 链接器错误:未定义对函数的引用 6 年前 |
kreuzerkrieg · 阴影和GCC-Wshadow 6 年前 |
ar2015 · 在汇编代码中查找循环或数字 6 年前 |