^这不是重复的问题^
更新:
我对编程很新,我现在才刚刚遇到makefile。
我在过去几个月里从各个地方下载了一堆教程和源代码;到目前为止,我一直只使用VS解决方案,并一直在避免它们。
我见过在google上使用Makefiles的多种方法,但它们的复杂性各不相同......
我对他们没有任何线索或如何使用它们。感谢。
编辑(重新措辞):
总而言之,由于显而易见的混淆,我的问题是(并且始终如此):
1) Is there a good tutorial that comes recommended or is it easy to get started with Makefiles?
2) How do you launch and run an existing Makefile? And,
3) Do Makefiles hold any vital data about the program or could I just use the `.h` and `.cpp` files that come with them in a new solution built from scratch?
答案 0 :(得分:8)
何时使用Makefile
的问题是一个意见问题。当然,你可以使用一些替代builder(例如omake,但还有很多其他的)。只要您的软件中有多个翻译单元,您当然需要一些构建系统。如果使用make
Makefile
,则通过详细说明依赖关系来描述构建过程。通常,通过简单的make
命令完成构建程序。
一些实用程序,例如cmake,qmake,automake等等是Makefile
生成器。它们使用GNU make的所有功能生成一个复杂的Makefile
,通常不。
如果您决定使用make
,我建议您使用GNU make(这也是一种观点)。在这种情况下,请仔细阅读其documentation,我发现它非常易读并且包含一个很好的教程。不要忘记使用最新版本:GNU make 4.0版本于2013年10月发布,带来了许多有趣的新功能(插件,最重要的是guile的可扩展性),这些功能对复杂的构建很有意义。
要调试复杂的Makefile
,请考虑使用remake(特别是remake -x
)。
实际上, GNU make 有很多内置规则。你得到make -p
;所以使用它们。
您也可以选择代码POSIX make
utility(标准规范,但功能不如 GNU make ,可配置为关注POSIX规范)。
如何编码Makefile
是一个品味和软件复杂性的问题。如果您有2个或3个*.cc
个文件,其中包含.h
个公共标题,则您不希望所有花哨的技巧(例如automatic dependencies,由GCC和make
提供)值得在数百个源文件的软件上使用(有时生成C ++源代码,因此构建系统必须知道这一点。)
这是一个很小的GNU Makefile
来帮助你:
## file Makefile
CXX= g++
CXXSOURCES= main.cc other.cc
CXXOBJECTS= $(patsubst %.cc, %.o, $(CXXSOURCES))
OPTIMFLAGS= -g -O
PACKAGES= glib-2.0
PKGCONFIG= pkg-config
CXXFLAGS= -std=c++11 -Wall $(OPTIMFLAGS)
CPPFLAGS:= $(shell $(PKGCONFIG) --cflags $(PACKAGES))
LIBES:= $(shell $(PKGCONFIG) --libs $(PACKAGES)) -ldl
.PHONY: all clean
all: myprog
myprog: $(CXXOBJECTS)
$(LINK.cc) -rdynamic $^ $(LIBES) -o $@
$(CXXOBJECTS): yourheader.h
clean:
$(RM) *.o *.so *.orig *~ myprog core* *.hh.gch
## eof Makefile
我并不认为这是一个完美的例子(事实并非如此)。请注意,制表对make
很重要,我无法在上面输入。您将使用make all
(或仅make
)来构建程序,并make clean
删除非源文件。
出于不明原因,有时可能会使用autotools或cmake生成Makefile
。对于简单的程序,可能不值得学习如何使用它们。
在某些情况下 GNU make 不值得或不合适:MELT我几乎放弃了使用它(通过从中调用一些autogen生成的shell脚本)因为它是一种自举语言,其中一组C ++文件是从一组MELT文件生成的,所以你有一个多对多的准循环依赖关系。可能使用GUILE扩展可能会有很大帮助。但是这种噩梦很少见。
PS:我作为Linux用户回答;不知道什么适用 - 或不适用于我从未使用过的Windows。另请参阅these hints关于Linux上的C或C ++编程。
PS2:Paul Evans' answer是相关的:不要自己编写Makefile
,复制现有的一个以满足您的需求。
答案 1 :(得分:2)
如果你要求一个好的教程,我认为this one是好的!你可以完全遵循它。我通过它学习了make文件。
答案 2 :(得分:1)
开始推出自己的makefile
时成功的基本概念是不要!始终使用类似的,简单的工作 makefile
作为模板,并将其更改为您自己的构建。只有在完成这项工作后,您才可以通过勤奋的阅读和学习来研究如何改进它,使其更通用,等。然后有一天可能会出现在 far 的未来,你可以从头开始编写makefile
。但如果那一天永远不会到来,请不要失望。