2012-03-12 27 views
0

我在Linux上有一个基本的基于makefile的项目。它也构建在Windows上的Visual Studio中。如何设置Makefile以使用Visual-Studio样式的输出目录进行构建?

我想修改我的Linux makefile以创建具有不同二进制文件,调试和发布的多个版本,但可能会添加其他版本。

如何设置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文件目录来检查源文件是否已经构建。

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

回答

1

做了一段时间的阅读,头部到Paul Smith's homepage,谁是GNU的维护者制作,并阅读这两篇文章:

然后你会可能理解建立除当前目录以外的目录不是一个好主意,因为这意味着违背Make的粒度。

的文章也将指导您如何组织构建,它可能只适合特定的情形。

+0

谢谢,这是有用的,正是我所需要的。 – 2012-03-13 02:59:28

0

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

另一种方法是使用lndir工具创建符号链接的构建树。这将立即为所有项目添加多重构建功能。这个想法是,你有一个镜像目录树,通过符号链接填充原始树中的原始文件。该程序的构建系统并不聪明(除非它像标准化路径那样做白痴的事情,删除符号链接:Lisp构建系统ASDF的维护者,注意!)。它通过符号链接访问文件,但在本地丢弃对象。好的是,源代码目录可以完整无缺,甚至只读!而且你可以做得比make clean更好:只需吹掉lndir生成的链接库即可达到完全原始状态。

我用这样的技巧为几种体系结构(所有软件包:glibc,gcc,apache,你的名字)构建了一个Linux发行版。

它都是从相同的工作副本构建的;相同的解压来源。

将此支持黑入该项目将是最后的手段。如果你喜欢GNU Make语言,那就去做吧。阅读关于GNU Make的信息手册,从头到尾两次或三次,然后离开你......我知道怎么做,而且我也是这样做的,但有什么意义。这将需要空间来解释,并不值得。

+0

的缺点符号链接树的是,虽然你可以通过符号连接方便的编辑(如修复编译通过错误浏览您的编辑器支持错误),如果你曾经加入一个文件,你要记住将其添加在原来的树并刷新符号链接。这不是什么大不了的事,但是在鞋小石头能走几英里之后变成一个大麻烦。 – Kaz 2012-03-12 22:20:27