我需要修改Makefile我只需要將與「record.c」關聯的目標文件存儲到bin文件夾中。這是執行Make之前我的目錄結構的樣子。使用Makefile將對象文件存儲在兩個不同的目錄中? [C]
bin/
include/
-hash_table.h
-history.h
-parser.h
-record.h
-shell.h
-variables.h
lib/
obj/
src/
-hash_table.c
-history.c
-parser.c
-record.c
-shutil.c
-sshell.c
-variables.c
...這裏是Makefile文件:
# Beginning of Makefile
SRC = src/shutil.c src/parser.c src/sshell.c src/history.c src/hash_table.c src/variables.c src/record.c
OBJS = obj/shutil.o obj/parser.o obj/sshell.o obj/history.o obj/hash_table.o obj/variables.o bin/record.o //<----
HEADER_FILES = include/shell.h include/parser.h include/history.h include/hash_table.h include/variables.h include/record.h
EXECUTABLE = sshell
LIBS = lib/libshell.so lib/libparser.so lib/libhistory.so lib/libhash_table.so lib/libvariables.so lib/librecord.so
LIBCFLAGS = $(CFLAGS) -D_REENTRANT -fPIC
CFLAGS = -Wall
CC = gcc
# End of configuration options
#What needs to be built to make all files and dependencies
all: $(EXECUTABLE)
#Create the main executable
$(EXECUTABLE): $(OBJS) $(LIBS)
$(CC) -o $(EXECUTABLE) obj/sshell.o -Llib -lparser -lshell -lhistory -lhash_table -lvariables -lrecord
#Create the library files
lib/libparser.so: obj/parser.o
$(CC) $(LIBFLAGS) -shared $^ -o [email protected]
lib/libshell.so: obj/shutil.o
$(CC) $(LIBFLAGS) -shared $^ -o [email protected]
lib/libhistory.so: obj/history.o
$(CC) $(LIBFLAGS) -shared $^ -o [email protected]
lib/libhash_table.so: obj/hash_table.o
$(CC) $(LIBFLAGS) -shared $^ -o [email protected]
lib/libvariables.so: obj/variables.o
$(CC) $(LIBFLAGS) -shared $^ -o [email protected]
lib/librecord.so: bin/record.o //<----
$(CC) $(LIBFLAGS) -shared $^ -o [email protected]
#Recursively build object files
obj/%.o: src/%.c //<---- I feel like this is causing the problem.
$(CC) $(CFLAGS) -I./include/ -c $< -o [email protected]
#Define dependencies for objects based on header files
#We are overly conservative here, parser.o should depend on parser.h only
$(OBJS) : $(HEADER_FILES)
clean:
-rm -f $(EXECUTABLE) obj/*.o lib/*.so lib/*.a bin/*.o
-rm -f .sshell_history.txt
run: $(EXECUTABLE)
(export LD_LIBRARY_PATH=lib; ./$(EXECUTABLE))
# End of Makefile
隨着我做了什麼(最有可能完全關閉)它不會編譯record.c,說斌/ record.o做不存在。我對Makefiles不是很有經驗,所以我想知道我是否可以得到一些幫助。謝謝!
考慮使用'cmake'或'automake'代替普通的'Makefile'。如果你有一些可用的資源,在處理不平凡的項目構建時,它們可以爲你節省大量的工作。 – 2013-05-13 22:12:44
好的,我會研究那些用於將來的項目,但是可以在此Makefile中進行更改嗎? – 2013-05-13 22:16:29
所以你想'record.o'進入'bin /'。其他目標文件應該放在哪裏? – Beta 2013-05-13 22:54:12