Создайте файл сборки и запустите файлы C, затем запустите сценарий Bash

#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 objs

link : 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 не могли бы вы, пожалуйста, проверить, работает ли это для вас