GNU Makefile,C 编程

发布于 2024-12-03 10:25:02 字数 320 浏览 1 评论 0原文

我当前的 makefile 看起来像这样

all: hello

hello: hello.o
    clang -o hello hello.o

hello.o: hello.c
    clang -Wall -std=c99 -c -o hello.o hello.c -lpthread

clean:
rm -f *.o *exe hello

我如何修改它以使用以下内容进行编译:

clang -std=gnu99 -Wall -o hello hello.c -lpthread

my current makefile looks likes this

all: hello

hello: hello.o
    clang -o hello hello.o

hello.o: hello.c
    clang -Wall -std=c99 -c -o hello.o hello.c -lpthread

clean:
rm -f *.o *exe hello

How can I modify it to compile with the following:

clang -std=gnu99 -Wall -o hello hello.c -lpthread

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

卖梦商人 2024-12-10 10:25:02

现在使用

hello: hello.c
    clang -std=gnu99 -Wall -o hello hello.c -lpthread

hello 和 hello.o 的两条规则来代替。

然而,当您的程序变得更大时,将编译与目标文件和链接分开在某种程度上可能比一次性编译和链接所有内容更快。通过分离编译和链接编译单元,未修改的单元不需要每次都重新编译。

Use

hello: hello.c
    clang -std=gnu99 -Wall -o hello hello.c -lpthread

instead of the two rules you have for hello and hello.o now.

When your program gets bigger, however, the separation of compilation to object files and linking may at some point be faster than compiling and linking everything in one go. With separated compilation and linking compilation units that are unmodified do not need to be recompiled every time.

留一抹残留的笑 2024-12-10 10:25:02

试试这个 - 通常最好的编译是几个步骤。

all: hello

hello: hello.o
    clang -o hello hello.o -lpthread

hello.o: hello.c
    clang -Wall -std=c99 -c -o hello.o hello.c 

clean:
rm -f *.o  hello

Try this - usually best to do the compiling is a few steps.

all: hello

hello: hello.o
    clang -o hello hello.o -lpthread

hello.o: hello.c
    clang -Wall -std=c99 -c -o hello.o hello.c 

clean:
rm -f *.o  hello
骄傲 2024-12-10 10:25:02

您的修改只需要更改一行;但相反,您应该使用一些变量来使其更清晰:

# C compiler
CC = clang
# Additional libraries
LIBS = -lpthread
# Compiler flags
CCFLAGS = -std=gnu99 -Wall $(LIBS)
# Output executable
OUT = hello

all: hello

hello: hello.o
    $(CC) $(CCFLAGS) -o $(OUT) hello.o

hello.o: hello.c
    clang $(CCFLAGS) -c -o hello.o hello.c

clean:
    rm -f *.o $(OUT)

Your modification requires just changing a single line; but instead, you should use some variables to make it cleaner:

# C compiler
CC = clang
# Additional libraries
LIBS = -lpthread
# Compiler flags
CCFLAGS = -std=gnu99 -Wall $(LIBS)
# Output executable
OUT = hello

all: hello

hello: hello.o
    $(CC) $(CCFLAGS) -o $(OUT) hello.o

hello.o: hello.c
    clang $(CCFLAGS) -c -o hello.o hello.c

clean:
    rm -f *.o $(OUT)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文