# You will have to modify this line to list the actual files you use.
# You could set it to use all the "fileN" files that you have,
# but that's dangerous for a beginner.
FILES = file1 file2 file3
OBJECTS = $(addsuffix .o,$(FILES)) # This is "file1.o file2.o..."
# This is the rule it uses to assemble file1.o, file2.o... into mydll.dll
mydll.dll: $(OBJECTS)
gcc -shared $^ -o $@ # The whitespace at the beginning of this line is a TAB.
# This is the rule it uses to compile fileN.cpp and fileN.h into fileN.o
$(OBJECTS): %.o : %.cpp %.h
g++ -c $< -o $@ # Again, a TAB at the beginning.
2 回答
扩展名根本不会,如果你想让GNU make自动找到它,那么文件名为Makefile .
Make具有自动变量,可以单独控制C / C文件中的大部分构建过程 . 这些变量包括
CC
,_CPP
,CFLAGS
,CPPFLAGS
,CXX
,CXXFLAGS
和LDFLAGS
. 这些将控制切换到C / C预处理器,编译器,平台对象和程序链接器(生成所谓的"program executable"或plainspeak "the program you are compiling"的程序) .GNU make还包含许多隐式规则,这些规则是为了从C / C源代码构建程序而定制的,因此您不必从头开始编写这些规则 .
例如,即使没有makefile,如果你尝试
make foobar
,GNU Make将尝试首先从foobar.c
或foobar.cpp
构建foobar.o
,如果它找到,通过调用适当的编译器,然后将尝试通过汇编(包括链接)来构建foobar
系统库中的部件和foobar.o
. 简而言之,GNU Make知道如何在没有makefile存在的情况下构建foobar
程序 - 这要归功于隐式规则 . 您可以通过使用-p
开关调用Make来查看这些规则,例如make -p
.有些人喜欢依赖GNU Make隐式规则数据库来创建精简版和简短的makefile,其中只指定了特定于他们项目的那些,而有些人甚至可以禁用整个隐式规则数据库(使用
-r
开关)并且已经完整通过从头开始指定所有内容来控制构建过程 . 我不会评论任何一种策略的有效性,但请放心,两者在某种程度上都有效 .在构建dll时可以设置很多选项,但是如果您从命令行执行此操作,则可以使用这个基本命令:
这是一个makefile(通常称为
Makefile
),它将处理整个构建过程:现在要构建
mydll.dll
,只需输入"make"即可 .几个笔记 . 如果只键入"make"而不指定makefile或目标(要构建的东西),Make将尝试使用默认的makefile("GNUMakefile","makefile"或"Makefile")和默认目标(makefile中的第一个,在这种情况下)
mydll.dll
) .