gpt4 book ai didi

c++ - 在 Makefile 中添加 INCLUDE、LIB 和 LD_LIBRARY_PATH

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:20 27 4
gpt4 key购买 nike

我正在编写一个新的 Makefile 并想将我的目标文件复制到 obj/文件夹中。我试图添加 OBJ 目录文件夹,但它没有启动。我确定我错过了什么。现在我在编译后将 .o 文件从 src/文件夹移动到 obj/文件夹。

能否请您告诉我如何在此 makefile 中添加 INCLUDES 和 LIB_INCLUDES。由于 Makefile 中不存在包含路径,因此期望我在包含头文件时在源代码中指定完整(相对)路径。

此外,我想在我的可执行文件中静态包含一些外部库 (LD_LIBRARY_PATH),那么如何在 Makefile 中指定它们:

APPNAME := MyApp.x
SOURCE_DIR := ./src
INCLUDE_DIR := ./include
OBJECT_DIR := ./obj
BIN_DIR := ./bin

CC := g++
CCFLAGS := -g -Wall

SRCFILES := $(wildcard $(SOURCE_DIR)/*.cpp)
INCLUDES := $(INCLUDE_DIR)
LIB_INCLUDES := $(INCLUDE_DIR)
OBJECTS := $(patsubst %.cpp, %.o, $(SRCFILES))

all: $(APPNAME)

$(APPNAME): $(OBJECTS)
$(CC) $(CCFLAGS) $(LDFLAGS) -o $(BIN_DIR)/$(APPNAME) $(OBJECTS) $(LDLIBS)
\mv -f $(SOURCE_DIR)/*.o obj

depend: .depend

.depend: $(SRCFILES)
rm -f ./.depend
$(CC) -I$(INCLUDES) $(CCFLAGS) $^>>./.depend;

clean:
rm -f $(OBJECTS)

dist-clean: clean
rm -f *~ .depend

include .depend

为此请求创建了单独的线程 - lubgr。

最佳答案

试试这个(为了简洁起见,我去掉了 .depend 部分和两个 clean 目标):

APPNAME := MyApp.x
SOURCE_DIR := src
INCLUDE_DIR := include
OBJECT_DIR := obj
BIN_DIR := bin

CC := g++
CCFLAGS := -g -Wall

SRCFILES := $(wildcard $(SOURCE_DIR)/*.cpp)
INCLUDES := $(INCLUDE_DIR)
OBJECTS := $(SRCFILES:$(SOURCE_DIR)/%.cpp=$(OBJECT_DIR)/%.o)

all: $(BIN_DIR)/$(APPNAME)

$(BIN_DIR)/$(APPNAME): $(OBJECTS)
$(CC) $(CCFLAGS) -o $@ $(OBJECTS)

$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cpp
$(CC) $(CCFLAGS) -I$(INCLUDES) -o $@ -c $<

对于更多的静态库,您将它们像目标文件一样传递给链接器,例如

STATIC_LIBS = lib/libfirst.a lib/libsecond.a

$(BIN_DIR)/$(APPNAME): $(OBJECTS)
$(CC) $(CCFLAGS) -o $@ $(OBJECTS) $(STATIC_LIBS)

这在链接共享库时有所不同,但正如您所说,您的库都被编译成静态库,这应该可行。

关于c++ - 在 Makefile 中添加 INCLUDE、LIB 和 LD_LIBRARY_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50928862/

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