繁体   English   中英

使用Make编译C

[英]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:

http://pastebin.com/PCk0gNtE

您最感兴趣的部分是本节:

# 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM