创建文件夹:
-
src 文件夹:用于存放源代码文件。
main.c
:主要的 C 源代码文件。kbd_lnx.cpp
:键盘 Linux 实现的 C++ 源代码文件。
-
include 文件夹:用于存放头文件。
kbd_lnx.h
:键盘 Linux 实现的头文件。
-
obj 文件夹:用于存放编译生成的目标文件。
- 在编译时,将生成的
main.o
和kbd_lnx.o
放在这个文件夹中。
- 在编译时,将生成的
-
bin 文件夹:用于存放生成的可执行文件。
- 在链接时,将生成的
run
可执行文件放在这个文件夹中。
- 在链接时,将生成的
Makefile文件代码:
CC = gcc
CXX = g++
CFLAGS = -Wall
CXXFLAGS = -Wall
SRC_DIR = src
INCLUDE_DIR = include
OBJ_DIR = obj
BIN_DIR = bin
SRCS = $(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/*.cpp)
OBJS = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS)))
all: $(BIN_DIR)/run
$(BIN_DIR)/run: $(OBJS)
$(CXX) $(CXXFLAGS) -o $@ $^
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CXX) $(CXXFLAGS) -I$(INCLUDE_DIR) -c $< -o $@
clean:
rm -f $(OBJ_DIR)/*.o $(BIN_DIR)/run
在上述 Makefile 中,通过以下变量来定义文件夹路径:
SRC_DIR
:源代码文件夹路径。INCLUDE_DIR
:头文件文件夹路径。OBJ_DIR
:目标文件文件夹路径。BIN_DIR
:可执行文件文件夹路径。
使用 wildcard
函数来获取 $(SRC_DIR)
中的所有源代码文件,并使用 patsubst
函数将源文件转换为目标文件路径。这样,$(OBJS)
变量将包含所有的目标文件。
在目标 $(BIN_DIR)/run
中,使用 $@
表示目标文件的路径,$^
表示所有的依赖文件路径。
在规则 $(OBJ_DIR)/%.o
中,使用 $<
表示第一个依赖文件的路径,$@
表示目标文件的路径。
最后,添加 clean
目标,以删除新的目标文件和可执行文件路径。
确保在项目根目录下创建相应的文件夹,并将相应的源代码文件放在正确的文件夹中。这样就可以使用更新后的 Makefile 进行编译和链接,生成可执行文件。
结果: