Makefile 编译多个目标文件

Makefile 编译多个目标文件

Makefile编译多个目标文件

1
TARGET := signal_send signal_recieve method_send method_recieve

CC := gcc
CFLAGS  := `pkg-config --cflags dbus-1`
LDFLAGS := `pkg-config --libs   dbus-1`

all: $(TARGET)

signal_send: signal_send.c
        $(CC)  $< -o $@ $(CFLAGS) $(LDFLAGS)

signal_recieve: signal_recieve.c
        $(CC)  $< -o $@ $(CFLAGS) $(LDFLAGS)

method_send: method_send.c
        $(CC)  $< -o $@ $(CFLAGS) $(LDFLAGS)

method_recieve: method_recieve.c
        $(CC)  $< -o $@ $(CFLAGS) $(LDFLAGS)

clean:
        rm -rf $(TARGET)
.PHONY:clean

2

CC      = gcc
TARGET1 =       enroll_sync_so_app
TARGET2 =       verify_sync_so_app
LIBSPATH = /usr/lib/x86_64-linux-gnu/
PLATFORM = linux32
#LIBS   = /usr/local/lib -lusb-1.0
LIBS    = -lusb-1.0 -lm -lpthread -I.  -L. -lCSAlgDll
INC     = /usr/include/libusb-1.0

EXCHAR  = -fexec-charset=GB18030

# Source files
SRCS1 = enroll_sync_so_app.c  xqh_alg.c usb_ops.c
SRCS2 = verify_sync_so_app.c  xqh_alg.c usb_ops.c

# Object files
OBJS1   = $(SRCS1:.c=.o)
OBJS2   = $(SRCS2:.c=.o)

# Make everything
all:    $(TARGET1) $(TARGET2)

$(TARGET1): $(OBJS1)
        $(CC) $(CFLAGS) $(EXCHAR) -o $(TARGET1) $(OBJS1)  $(LIBS)

$(OBJS1): %.o: %.c
        $(CC) -c $(CFLAGS) $(EXCHAR) -o $@ $< -I$(INC)
#

$(TARGET2): $(OBJS2)
        $(CC) $(CFLAGS) $(EXCHAR) -o $(TARGET2) $(OBJS2)  $(LIBS)

$(OBJS2): %.o: %.c
        $(CC) -c $(CFLAGS) $(EXCHAR) -o $@ $< -I$(INC)
# Clean all object files...
#

clean:
        $(RM) $(OBJS1) $(TARGET1)
        $(RM) $(OBJS2) $(TARGET2)
                                        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个多文件makefile 示例: ```makefile # 定义编译器 CC = g++ # 定义编译参数 CFLAGS = -c -Wall # 定义链接参数 LFLAGS = -Wall # 定义源文件目录 SRC_DIR = src # 定义头文件目录 INC_DIR = include # 定义目标文件目录 OBJ_DIR = obj # 定义可执行文件目录 BIN_DIR = bin # 定义源文件列表 SRCS = $(wildcard $(SRC_DIR)/*.cpp) # 定义头文件列表 INCS = $(wildcard $(INC_DIR)/*.h) # 定义目标文件列表 OBJS = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS)) # 定义可执行文件名 TARGET = $(BIN_DIR)/app # 编译规则 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(INCS) $(CC) $(CFLAGS) -I$(INC_DIR) $< -o $@ # 链接规则 $(TARGET): $(OBJS) $(CC) $(LFLAGS) $(OBJS) -o $@ # 清理规则 clean: rm -rf $(OBJ_DIR)/*.o $(TARGET) ``` 在这个示例中,我们假设有一个包含源文件和头文件的 `src` 和 `include` 目录,以及一个存放目标文件的 `obj` 目录和存放可执行文件的 `bin` 目录。我们希望将所有的源文件编译目标文件,再将所有的目标文件链接成可执行文件makefile 中的变量 `CC`、`CFLAGS` 和 `LFLAGS` 分别定义了编译器、编译参数和链接参数,我们可以根据需要进行修改。 makefile 中的变量 `SRC_DIR`、`INC_DIR`、`OBJ_DIR` 和 `BIN_DIR` 分别定义了源文件目录、头文件目录、目标文件目录和可执行文件目录,我们也可以根据需要进行修改。 makefile 中的变量 `SRCS`、`INCS` 和 `OBJS` 分别定义了源文件列表、头文件列表和目标文件列表,其中 `$(wildcard)` 函数可以获取指定目录下的所有文件,`$(patsubst)` 函数可以将一个文件名模式映射到另一个文件名模式,具体可以参考 GNU make 的文档。 makefile 中的规则 `$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(INCS)` 定义了编译规则,表示将源文件编译目标文件,其中 `-I$(INC_DIR)` 表示将头文件目录添加到编译器的搜索路径中。 makefile 中的规则 `$(TARGET): $(OBJS)` 定义了链接规则,表示将所有的目标文件链接成可执行文件makefile 中的规则 `clean` 定义了清理规则,表示删除所有的目标文件和可执行文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值