我正在尝试为客户提供的目录结构和文件列表编写 Makefile 脚本。下图显示了源文件和头文件在项目主目录中的大致位置。
rootDir/
-lib/
-socketserver/
-dist/
-bin/
-include/
-abms_engine_socket_server/
-abms_engine_socket_server.h
-common/
-----
-hashtable/
-----
-src/
-abms_engine_socket_server/
-Makefile
-abms_engine_socket_server.c
-common/
-----
-hashtable/
-----
在本例中,下面是构建目标目录
库文件目录:(rootDir)/lib/socketserver bin 文件目录:(rootDir)/dist/bin/abms_engine_socket_server 制作文件目录:(rootDir)/src/abms_engine_socket_server 包含文件和源文件也位于“include”和“src”目录中。
我已经尝试使用下面的脚本来编译整个源文件。
HEADER_DIR = ../../include/abms_engine_socket_server
HEADER_COMMON_DIR = $(HEADER_DIR)/common
HEADER_HASHTABLE_DIR = $(HEADER_DIR)/hashtable
SRC_DIR = ..
SRC_COMMON_DIR = $(SRC_DIR)/common
SRC_HASHTABLE_DIR = $(SRC_DIR)/hashtable
OBJ_DIR = ../../lib/socketserver
DEST_DIR = ../../dist/bin
SRC = abms_engine_socket_server.c
CC = gcc -g -std=gnu99 -DUNIX -DINTERNAL_LOGGER
CFLAGS = -lm
PROG_ENG_SOCKET_SVR = $(DEST_DIR)/abms_engine_socket_server
HASHTABLE_OBJS = $(OBJ_DIR)/hashtable.o $(OBJ_DIR)/hashtable_itr.o $(OBJ_DIR)/hashtable_utility.o
COMMON_OBJS = $(OBJ_DIR)/CUtil.o $(OBJ_DIR)/CConfig.o $(OBJ_DIR)/CSocket.o
#Compiler to compile the hashtable objects
$(OBJ_DIR)/%.o : $(SRC_HASHTABLE_DIR)/%.c
$(CC) -c $< -o $@
#Compiler to compile the common objects which have header files too
$(OBJ_DIR)/%.o : $(SRC_COMMON_DIR)/%.c
$(CC) -c $< -o $@
#Compiler to compile the process objects which do not have header files
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
$(CC) -c $< -o $@
#Compiler to compile the other binaries
$(DEST_DIR)/% : $(OBJ_DIR)/%.o $(HASHTABLE_OBJS) $(COMMON_OBJS)
$(CC) $(CFLAGS) $(HASHTABLE_OBJS) $(COMMON_OBJS) $< -o $@
#all: $(PROG_ENG_SOCKET_SVR)
all: $(SRC) $(PROG_ENG_SOCKET_SVR)
clean:
rm -f *~ $(OBJ_DIR)/*.o $(PROG_ENG_SOCKET_SVR)
但最后我收到了以下错误 make:无需为“all”执行任何操作。
请指导我创建此 make 文件,以使用单个 make 文件编译这些源代码。欢迎所有回应。 谢谢。
最佳答案
我有一个相当相似的结构,所以你可以看看我在这里记录的makefile,如果它对你有帮助的话。
Makefile: no rule to make target
您必须查看已接受的答案,即包含我的工作版本的答案。
关于c - 编写一个make文件来编译一个项目,该项目的源代码和头文件位于不同的目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16765690/