2015-12-27 29 views
0

彙編文件我已經寫了一個makefile文件和所有的圖書館,因爲我需要,任何人可以用正確的表格和結構正確纂它:作出的許多文件

# Macros 
CC = gcc 
COMP_FLAG = -std=c99 -Wall -pedantic-errors -Werror -DNDEBUG 
LIB_FLAG = -L. -lmtm 
# Main target 
tests: memcache_test my_set_test cache_test user_test 

# Targets make <file> 
user_test: user_test.o user.o 
$(CC) user_test.o user.o $(LIB_FLAG) -o [email protected] 

memcache_test: memcache_test.o memcache.o user.o cache.o 
$(CC) memcache_test.o memcache.o user.o cache.o $(LIB_FLAG) -o [email protected] 

cache_test: cache_test.o cache.o 
$(CC) cache_test.o cache.o $(LIB_FLAG) -o [email protected] 

my_set_test: my_set_test.o my_set.o 
$(CC) my_set_test.o my_set.o -o [email protected] 


# Targets make <file>_test.o 
user_test.o: tests/user_test.c user.h tests/test_utilities.h map.h set.h 
$(CC) -c $(COMP_FLAG) $(LIB_FLAG) tests/$*.c 

memcache_test.o: tests/memcache_test.c tests/test_utilities.h memcache.h map.h cache.h set.h list.h 
$(CC) -c $(COMP_FLAG) $(LIB_FLAG) tests/$*.c 

cache_test.o: tests/cache_test.c cache.h tests/test_utilities.h set.h 
$(CC) -c $(COMP_FLAG) $(LIB_FLAG) tests/$*.c 

my_set_test.o: my_set/my_set_test.c tests/test_utilities.h my_set/my_set.h 
$(CC) -c $(COMP_FLAG) $(LIB_FLAG) my_set/$*.c 

# Targets make <file>.o 
memcache.o: memcache.c memcache.h map.h cache.h list.h set.h user.h 
$(CC) -c $(COMP_FLAG) $(LIB_FLAG) $*.c 

user.o: user.c user.h set.h map.h 
$(CC) -c $(COMP_FLAG) $(LIB_FLAG) $*.c 

cache.o: cache.c cache.h set.h 
$(CC) -c $(COMP_FLAG) $(LIB_FLAG) $*.c 

my_set.o: my_set/my_set.c my_set/my_set.h 
$(CC) -c $(COMP_FLAG) my_set/$*.c 

# Target runs all test files 
run: run_my_set_test run_cache_test run_memcache_test run_user_test 

run_clean: clean run 

run_my_set_test: my_set_test 
./my_set_test 

run_cache_test: cache_test 
./cache_test 

run_memcache_test: memcache_test 
./memcache_test 

run_user_test: user_test 
./user_test 

# Target remove all <*_test> and <*.o> files 
clean: clean_o clean_test 

clean_test: 
rm -f *_test 
clean_o: 
rm -f *.o 

當我嘗試運行它,它說:

***** missing separator. Stop.

我不知道如何以及在哪裏把分隔符。

+1

'make'將需要* action *部分(或其他名稱)的製表符。 – trojanfoe

+0

這是什麼意思?據我所知,我需要正確列表,但我不知道如何去做。這就是爲什麼我要求有人正確寫下來。我錯了嗎? –

+2

嗯,我認爲如果你瞭解格式應該是什麼,而不是來這裏找人爲你做你的工作會更好。網絡上應該有許多關於Makefiles的文章。 – trojanfoe

回答

0

每個規則在生成文件是一個冒號的線(「:」),隨後任選的線是命令。每個命令都必須以製表符開始:

user_test: user_test.o user.o 
    $(CC) user_test.o user.o $(LIB_FLAG) -o [email protected] 

這是否足夠說明?