c++ - 在 Makefile 中添加 INCLUDE、LIB 和 LD_LIBRARY_PATH
问题描述
我正在编写一个新的 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)
这在链接共享库时有所不同,但正如您所说,您的库都被编译成静态库,这应该可以工作。
推荐阅读
- vlookup - 查找函数没有给出准确的结果
- typescript - 将 null 分配给类型化变量时,Visual Studio Code 在 Typescript 代码中报告错误
- spring-mvc - 有没有办法根据我们单击的单选按钮重定向 jsp 页面
- swift - TableViewController 中自定义单元格的向下转换冲突
- typescript - 在 Visual Studio 代码中调试打字稿时如何查看控制台输出?
- discord.py - 使用其 id 获取不和谐语音通道
- php - PHP类中的SELECT查询
- r - 为 flexdashboard 绘制仪表图和串扰过滤
- html - 如何拥有全屏背景?
- javascript - Javascript比较数组中字典的键