【发布时间】:2018-06-19 12:48:07
【问题描述】:
我正在编写一个新的 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。
【问题讨论】:
-
最后一行
include .depend做了什么 -
LD_LIBRARY_PATH影响运行时链接。也许您的意思是LD_RUN_PATH,它指定了ld将合并到动态对象中以便在未来 运行时链接中搜索的目录? -
我不会复制或移动对象。通常,您编译到所需的对象目标目录。除其他问题外,链接对象的目录可以存储在应用程序中以供调试器使用。我会更改 $(CC) -I$(INCLUDES) $(CCFLAGS) $^>>./.depend;使用 -o 选项直接输出到对象目录。