在Makefile中添加INCLUDE,LIB和LD_LIBRARY_PATH

时间:2018-06-19 12:48:08

标签: c++ linux makefile

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

请让我知道如何在此Makefile中添加INCLUDES和LIB_INCLUDES。由于Makefile中没有包含路径,因此希望我在包含头文件的同时在源代码中指定完整(相对)路径。

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

xhtml:input

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

1 个答案:

答案 0 :(得分:0)

尝试一下(为简洁起见,我剥离了.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)

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