makefile: команды начинаются до первой цели - PullRequest
0 голосов
/ 21 сентября 2019

Я создал файл .so и у меня есть файл .c, в котором используются функции из этого .so.

Способ создания .so:

 gcc -shared -fPIC -o my_malloc.so my_malloc.c -ldl

Способ компиляциимой файл .c, который использует .so:

gcc hello.c -o hello.o ./my_malloc.so

И затем я запускаю программу, используя:

LD_PRELOAD=./my_malloc.so ./hello.o

Теперь я хочу создать make-файл, чтобы выполнить все эти шаги:

#Compiler to use
CC=gcc

#different flags
CFLAGS= -c -Wall

all: malloc_profiler
malloc_profiler : LD_PRELOAD=./my_malloc.so ./hello.o
    $(CC) my_malloc.so hello.o -o malloc_profiler

my_malloc.so : my_malloc.c
    $(CC) $(CFLAGS) -shared -fPIC -o my_malloc.so my_malloc.c -ldl

hello.o : hello.c
    $(CC) $(CFLAGS) hello.c -o hello.o ./my_malloc.so

clean:
    rm -rf *.o

Я получаю следующую ошибку.

make all
makefile:10: *** commands commence before first target.  Stop.

1 Ответ

1 голос
/ 21 сентября 2019

Вы помещаете командную строку, которую вы использовали для , запускаете программу как список необходимых компонентов в Makefile, а затем вызываете компилятор:

malloc_profiler : LD_PRELOAD=./my_malloc.so ./hello.o
    $(CC) my_malloc.so hello.o -o malloc_profiler

Измените это на правильный список ивызовите вашу программу:

malloc_profiler : my_malloc.so hello.o
    LD_PRELOAD=./my_malloc.so ./hello.o

Кроме того, ваши CFLAGS включают опцию -c, которой у вас нет в исходных командных строках.

Чтобы протестировать ваш Makefile без запуска команд, вызовите егокак это:

make -nB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...