gpt4 book ai didi

c++ - 如何使用 Gnu make 编写库?

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:26 25 4
gpt4 key购买 nike

我正在尝试创建一个名为 A.a 的库,它提供了一个类 A,它依赖于类 B 和 C,都在它们各自的文件中(.cpp. hpp).我通常手动编译所有代码,但随着文件数量的增加,我想使用 makefile。基本上,我会做的是:

g++ -c A.cpp
g++ -c B.cpp
g++ -c C.cpp
ar rvs A.a *.o

我如何构建一个执行此操作的 makefile? makefile 甚至可以调用 ar 吗?

这是我尝试过的:

CC=g++
CFLAGS=-c -Wall
objects=C.o B.o

all : A.o $(objects) #Creates the library called A.a.
:ar rvs A.a A.o $(objects)

A.o : $(objects) A.hpp A.cpp
:$(CC) $(CFLAGS) A.cpp

B.o : B.hpp B.cpp
:$(CC) $(CFLAGS) B.cpp

C.o : C.hpp C.cpp
:$(CC) $(CFLAGS) C.cpp

但似乎我的 ar rvs A.a A.o $(objects) 指令甚至没有执行。此 makefile 会生成所有正确的 .o 文件,但不会将它们存档。

最佳答案

您可以使用规则和模式使其更通用:

SRC_DIR = .
CPPFLAGS += -g
INCLUDES = -I.

# variant 1
SRCS ?= $(shell find $(SRC_DIR) -name '*.cpp' | sed "s/[^\/]*\/[^\/]*\///")
# variant 2
SRCS = A.cpp B.cpp

%.o : $(SRC_DIR)/%.cpp
$(CXX) -o $@ $(INCLUDES) $(CPPFLAGS) -c $^

all : A.a

A.a : $(SRCS:.cpp=.o)
$(AR) rsv $@ $^

关于c++ - 如何使用 Gnu make 编写库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12498922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com