#bash #makefile
Вопрос:
У меня есть 2 файла .c для сборки. Я бы хотел запустить их вместе (если возможно. Или я могу скомпилировать здесь, а затем запустить сценарий bash?), а затем запустить файл .sh, чтобы сравнить их результат с ожидаемым (для тестирования).
Мой файл MakeFile в настоящее время:
CC=gcc
CFLAGS=-Wall -Werror -Wvla -std=gnu11 -fsanitize=address
PFLAGS=-fprofile-arcs -ftest-coverage
DFLAGS=-g
p1: file_1.c file_2.c file_1.h
$(CC) $(CFLAGS) $(PFLAGS) $^ -o $@
p2: p1
bash t.sh
Комментарии:
1. работает ли для вас решение, которое я вам предоставил
2. Ваш вопрос не ясен. Вы имеете в виду, что у вас есть два разных исходных файла, каждый из которых должен быть скомпилирован в отдельную программу, а затем вы хотите запустить каждую программу? Или вы имеете в виду, что у вас есть два разных исходных файла, и вы хотите скомпилировать их оба вместе, чтобы создать одну программу, а затем запустить эту одну программу?
3. @DianaA делает это для вас
Ответ №1:
Пожалуйста, найдите ниже код, который позволит вам протестировать и запустить сценарий оболочки вместе с параллельной компиляцией.
.SILENT: .PHONY:compile objs TARGET = program.exe CC=gcc # INC variable contains path where your header files are available. Compiler will # search header files in this directory. INC = ./inc CFLAGS=-Wall -Werror -Wvla -std=gnu11 -fsanitize=address -I$(INC) PFLAGS=-fprofile-arcs -ftest-coverage DFLAGS=-g SOURCES = file_1.c file_2.c OBJ_FILES:= $(SOURCES:.c=.o) objs: $(OBJ_FILES) %.o: %.c $(CC) $(CFLAGS) -c
lt; -o $@
all: test
# Enable parallel compilation
compile:
make -j ${NUMBER_OF_PROCESSORS} -O objslink : compile $(TARGET)
$(TARGET): $(OBJ_FILES)
$(CC) $(CFLAGS) $(OBJ_FILES) -o $@test: link
# Execute test script
echo "Executing test script"
bash t.sh
Выполните команду : сделайте тест или сделайте все
Комментарии:
1. @DianaA вы можете указать путь к заголовочному файлу для флагов компилятора, передав опцию-I с указанием пути, по которому находятся ваши заголовочные файлы. Пример: Если ваши файлы заголовков находятся в папке inc, то вы используете :
CFLAGS = -I./inc
. Я добавлю в ответ.2. @DianA не могли бы вы, пожалуйста, проверить, работает ли это для вас