[英]Using Make for compiling C
我正在尝试学习make,以便在学习C时使我的编译更加容易。
我正在尝试做:
gcc -Wall -g 3.c -o 3 -lm
运用
CC = gcc
CFLAGS = -Wall -g
clean:
rm -f 3
但是我不知道如何以及在哪里将-lm放在makefile中。 我已经在网上寻找教程,但是他们并没有专门解决“ -lm”选项,或者如果这样做的话,几乎没有解释,在我的情况下不起作用。
您需要在其中执行gcc命令的“目标”。 喜欢:
CC = gcc
CFLAGS = -Wall -g
all:
gcc -Wall -g 3.c -o 3 -lm
clean:
rm -f 3
然后,您只需用宏替换“ all”命令的一部分即可; 例如,CFLAGS可能带有“ -lm”。
如果您运行“ make -n”可能会有所帮助,这将告诉您如果make运行,make会做什么。
通常,您会在LIBS
变量中看到特定于库的标志,例如:
CC = gcc
CFLAGS = -Wall -g -I/some/include/directory
LIBS = -lm -L/some/library/directory
all:
$(CC) $(CFLAGS) $(LIBS) 3.c -o 3
您要查找的变量称为LDLFAGS
。 从GNU Make手册的第10.3节开始 :
LDFLAGS
当编译器应该调用链接程序“ ld”时,会给它们额外的标志。
因此,只需:
LDFLAGS += -lm
希望能帮助到你。
一个非常好的教程: Make教程:如何编写Makefile
这是我写的一个很好的通用makefile:
您最感兴趣的部分是本节:
# C Preprocessor Flags
CPPFLAGS +=
# compiler flags
CFLAGS += -ansi -Wall -Wextra -pedantic-errors
# libraries to link to ( m == math )
program_LIBRARIES := m
# LDFLAGS is the variable to hold linker flags
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))
GNU make定义了许多默认规则。 对于C编译和链接,这些规则是:
nc会自动以配方“ $(CC)$(CPPFLAGS)$(CFLAGS)-c”的形式自动生成否。
n是通过C编译器运行链接器(通常称为ld)从否自动生成的。 使用的精确配方为“ $(CC)$(LDFLAGS)否$(LOADLIBES)$(LDLIBS)”。
因此,将“ -lm”选项添加到链接器的方法是定义:
LDLIBS = -lm
然后,当使用Makefile运行make时,将运行以下命令:
gcc -Wall -g -c 3.c
gcc 3.o -o 3 -lm
(请注意,make将分两步编译C程序,首先创建目标文件3.o,然后将目标文件链接到可执行文件3)
(有关GNU make手册,请参见http://www.gnu.org/software/make/manual/ )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.