^这不是一个重复的问题^
更新:
我对编程很新,我现在才刚刚遇到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?
Run Code Online (Sandbox Code Playgroud)
何时使用Makefile的问题是一个意见问题.当然,您可以使用一些替代构建器(例如omake,但还有许多其他构建器).只要您的软件中有多个翻译单元,您当然需要一些构建系统.如果使用make,Makefile则通过详细描述依赖关系来描述构建过程.通常,通过简单的make命令完成构建程序.
一些公用事业公司,例如cmake,qmake,automake等......都是Makefile 发电机.它们生成一个Makefile通常不使用GNU make的所有功能的复合体.
如果您决定使用make,我建议使用GNU make(这也是一个意见).在这种情况下,请仔细阅读其文档,我发现这些文档非常易读且包含一个很好的教程.不要忘记使用最新版本:GNU make的4.0版本于2013年10月发布,带来了许多有趣的新功能(插件,最重要的是可扩展性通过guile),这对于复杂的构建很有意义.
要调试复杂 - Makefile考虑使用重制(特别是as remake -x).
实际上,GNU make有很多内置规则.你得到他们make -p; 所以使用它们.
您也可以选择为POSIX make实用程序编写代码(这是一个标准规范,但功能不如GNU make,可以配置为遵循POSIX规范).
如何编码Makefile是一个品味和软件复杂性的问题.如果你有2个或3个*.cc带有单个.h公共头文件的文件,你不希望所有花哨的技巧(例如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
Run Code Online (Sandbox Code Playgroud)
我并不认为这是一个完美的例子(事实并非如此).小心,制表很重要make,我无法在上面键入它们.您将使用make all(或仅仅make)构建程序,并make clean删除非源文件.
出于不明原因,有时Makefile可能使用autotools或cmake生成.对于简单的程序,学习如何使用它们可能不值得.
有些情况下GNU make不值得或不合适:在MELT中我几乎放弃使用它(通过从中调用一些autogen生成的shell脚本),因为它是一种自举语言,其中一组C++文件是从一个生成自己的一组MELT文件,因此您具有多个到多个准循环依赖关系.可能使用GUILE扩展可能会有很大帮助.但这种噩梦般的情况很少见.
PS:我作为Linux用户回答; 不知道什么适用 - 或不适用于我从未使用过的Windows.另请参阅有关Linux上的C或C++编程的这些提示.
PS2:Paul Evans的回答是相关的:不要自己编写Makefile,复制现有的一个以满足您的需求.
| 归档时间: |
|
| 查看次数: |
7469 次 |
| 最近记录: |