繁体   English   中英

如何设置要使用Visual Studio风格的输出目录进行构建的Makefile?

[英]How Do I Set Up A Makefile To Build Using Visual-Studio-Style Output Directories?

我在Linux上有一个基于makefile的基本项目。 它还在Windows的Visual Studio中构建。

我想修改我的Linux makefile来创建具有不同二进制文件的多个内部版本,然后启动Debug和Release,但是可能会添加其他版本。

如何设置Makefile项目,以不同​​方式构建源代码并到达不同路径?

例如,调试版本将类似于:

g++ -ggdb -Wall -DDEBUG
.o files in ./Debug/obj
.so and binary files in ./Debug/bin

释放输出将是:

g++ -Os -Wall
.o files in ./Release/obj
.so and binary files in ./Release/bin

使调试或使发布使他们,或使所有人都能做的一切。

我如何在Makefile中创建多个构建类型,但是我真正不清楚的部分是设置输出目录和设置要检查源文件是否已构建的.o文件目录。

有关相关示例和文档的指针将受到欢迎。

花一些时间阅读,转到Paul Smith的主页 (该人是GNU Make的维护者),然后阅读以下两篇文章:

然后您可能会理解,在当前目录以外的目录中构建不是一个好主意,因为这意味着违背Make的原则。

文章还将指导您如何组织构建,它可能恰好适合您的特定情况。

一种方法是让您的项目支持一种配置机制(类似于Autoconf的./configure脚本),以便可以在源目录以外的其他目录中配置它。 然后,您可以用不同的方式配置和构建它。

另一种方法是使用lndir工具创建lndir链接的构建树。 这将立即为几乎任何项目添加多重构建功能。 想法是您有一个镜像目录树,该目录树由符号链接填充到原始树中的原始文件。 该程序的构建系统绝非明智之举(除非它做一些愚蠢的事情,例如将路径规范化,删除符号链接:Lisp构建系统ASDF的维护者,请注意!)。 它通过符号链接访问文件,但在本地删除对象。 令人高兴的是,源目录可以是完整原始的,甚至是只读的! 而且,您做得比做make clean还好:只需lndir生成的链接服务器场,即可进入完全原始的状态。

我使用过这样的技巧来为几种体系结构构建Linux发行版(所有软件包:glibc,gcc,apache,随便命名)。

所有这些都是从相同的工作副本构建的; 相同的未压缩来源。

在项目中获得这种支持将是最后的选择。 如果您喜欢GNU Make语言,那就去吧。 从头到尾阅读两到三遍有关GNU Make的信息手册,然后您就可以开始了……我知道如何做,我也已经这样做了,但是有什么意义。 这将需要大量的空间来解释,这是不值得的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM