创建文件夹:
-
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 进行编译和链接,生成可执行文件。
结果:

文章详细描述了一个Makefile文件,用于组织C和C++源代码的编译流程,包括源代码文件结构、目标文件夹路径设置,以及如何通过Makefile生成可执行文件。它还介绍了clean目标,用于清理临时文件。
2028

被折叠的 条评论
为什么被折叠?



