c - Makefile C 包含已安装库的头文件并链接到库的最佳方法

标签 c makefile linker include

我通常使用 eclipse 来构建我的 C 项目。但我现在正在尝试构建一个 make 文件,如下所示。

我的问题是:

1) 为编译器指定 /usr/local/include/upm 中已安装库的头文件的包含路径的最佳方法是什么

2) 到一个名为 upmc-rn2483 的库用于链接阶段

TARGET_EXEC ?= app.out

BUILD_DIR ?= ./build
SRC_DIRS ?= ./src


SRCS := $(shell find $(SRC_DIRS) -name *.cpp -or -name *.c -or -name *.s)
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)

INC_DIRS := $(shell find $(SRC_DIRS) -type d)
INC_FLAGS := $(addprefix -I,$(INC_DIRS)) -I/usr/local/include/upm

CPPFLAGS ?= $(INC_FLAGS) -MMD -MP 

$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
    $(CC) $(OBJS) -o $@ $(LDFLAGS)

LD_FLAGS = -L/usr/local/lib/upm -L/usr/lib/rabbitmq 

LIBS = -lrabbitmq -lupmc-rn2483 -lupmc-rn2903 -lupmc-utilities

# c source
$(BUILD_DIR)/%.c.o: %.c
    $(MKDIR_P) $(dir $@)
    $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@.o
    $(CC) $(LD_FLAGS)    $@.o -o $@ $LIBS



.PHONY: clean

clean:
    $(RM) -r $(BUILD_DIR)

-include $(DEPS)

MKDIR_P ?= mkdir -p

最佳答案

1) what is the best way to specify an include path for the compiler to a header file

将包含目录的 -I 添加到预处理器标志中。

INC_FLAGS := $(addprefix -I,$(INC_DIRS)) -I/usr/local/include/upm

To a library called upmc-rn2483 for the linking phase

将库所在目录的 -L 标志添加到加载器标志中,将库本身的 -l 标志添加到加载器标志中。如果库是 /usr/local/lib/upm 中的 libupmc-rn2483.a 添加

LD_FLAGS = -L/usr/local/lib/upm -lupmc-rn2483

关于c - Makefile C 包含已安装库的头文件并链接到库的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50463749/

相关文章:

c++ - Qt 基类函数定义

c++ - gcc 链接器 - .obj 转储具有混合源程序集,但在 .elf 中链接时则不然

c - 链接器不通知多个定义

makefile - GNU Make 简单扩展变量和自动变量

c - Linux Kernel Makefile.build 构建外部模块时的奇怪行为

c - 为什么主函数中b的值没有改变?

c - 工具链与对齐的差异(为什么这甚至有效)

c - 返回一个值作为输出参数

c - 在 C 中使用 strcmp 按字母顺序排序

c - GNU 使 : different dependencies of several binaries in the same target?