LINUX.ORG.RU

помогите разобраться с make

 


0

1
test_log: tests/test_log.o  src/log.o

CFLAGS= -Wall -std=gnu11 -g -O0 -DDEBUG_P_MACHINE 
CC=gcc 

однако в результате не происходит сборка исполняемого файла

make test_log -B
gcc -Wall -std=gnu11 -g -O0 -DDEBUG_P_MACHINE    -c -o tests/test_log.o tests/test_log.c
gcc -Wall -std=gnu11 -g -O0 -DDEBUG_P_MACHINE    -c -o src/log.o src/log.c 

только компиляция. При этом метод main в src/test_log.c, а в log.c функционал, на который написаны тесты.

Можно каким-то образом написать мейкфайл, что-бы было примерно так:

app: src/app.o src/mod1.o src/mod2.o src/mod3.o 
mod1: tests/test_mod1.o src/mod1.o
mod2: tests/test_mod2.o src/mod2.o
mod3: tests/test_mod3.o src/mod3.o 
clean: 
    rm -f obj/* bin/*

?

test_log: tests/test_log.o  src/log.o

Т.е. test_log зависит от них. И они собираются. Дальше всё готово, и можно собирать сам test_log. А там - пусто. Так в чём же дело?

test_log: tests/test_log.o  src/log.o
	$(CC) $(LDFLAGS) -o $@ $^

gag ★★★★★
()
Ответ на: комментарий от gag

спасибо, получилось как-то так в итоге

....
log: tests/test_log.o  src/log.o
  2     $(CC) $(LDFLAGS) -o $@ $^
  3     +@mv tests/*.o obj/ 
  4     +@mv src/*.o obj/
  5     +@mv $@ bin/
  6     +@echo "test for " "log" " is built" 
  7 
  8 clean:
  9     +@rm -f tests/*.o
 10     +@rm -f src/*.o
 11     +@rm -f obj/*
 12     +@rm -f bin/*
 13     +@echo "cleaned..."
 14 
 15 CFLAGS= -Wall -std=gnu11 -g -O0 -DDEBUG_P_MACHINE
 16 CC=gcc

корявовато конечно, но для начала сойдёт... интересно вот, можно ли как-то совместить tests и src как $SRC_DIRS, а obj & bin как $OUTPUT_DIRS, что-бы индусский код исключить?

skeletonych
() автор топика
Ответ на: комментарий от skeletonych

ах ты млин, с перемещением .o и бинарей есть нюанс - make пересобирает всё каждый раз, независимо от наличия изменений в исходниках. Такой ключик -B получился походу...

skeletonych
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.