Makefile с двумя файлами .c и без заголовка - PullRequest
0 голосов
/ 26 сентября 2019

Попытка написать make-файл с двумя .c файлами и без заголовка.Тем не менее, кажется, что примеры в Интернете показали make-файл с заголовком.

Итак, я попытался написать заголовочный файл, и он сказал бы, что функция переопределена где-то еще.мой заголовок состоял из объявлений функций в обоих моих .c файлах.

#ifndef HEADER_H 
#define HEADER_H 

void calc(void parameters); 
int main(int argc, char* argv[]); 

struct compArray
   { 
   int start; 
   int end; 
   int thr; 
   int m; 
   int r; 
   };

#endif

Я уверен, что вы не пишете заголовок, но в идеале я хотел бы, чтобы мой make-файл был без заголовка.Ниже мой Makefile:

all:    thr_atomic.o thr_reduce.o
gcc -o make thr_atomic.o thr_reduce.o -lm -pthread

thr_atomic.o: thr_atomic.c
gcc -c thr_atomic.c

thr_reduce.o: thr_reduce.c
gcc -c thr_reduce.c

Возможно ли создать make-файл без заголовка?Мои два файла .c не зависят друг от друга.Если да, то как мне это сделать?А если нет, что бы я положил в свой header.h, чтобы сообщить компьютеру, что мои переменные не переопределяются и не зависят друг от друга?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Из того, что я могу понять из вашего вопроса, вам не нужен файл заголовка для компиляции кода C с использованием Makefile.Makefile не имеет ничего общего с исходным кодом.Все, что делает Makefile - это запускает команду (и), если указанные вами файлы были обновлены.

# Makefile
outfile: infile1 infile2
    command1
    command2
    # ^ commands MUST begin with a tab

Если вы запускаете make outfile, вот что происходит:

  1. Если outfile не существует, то make запускает command1, а затем запускает command2.
  2. Если существует outfile, но infile1 и infile2 с тех пор не обновлялось, make ничего не будет делать.
  3. Если существует outfile и infile1 или infile2 имеют , обновленное с outfile был последний раз изменен, затем make запустит command1 и затем запустит command2.

Это основы make и Makefiles.Файлы (outfile, infile1, infile2 и т. Д.) И команды (command1, command2) могут быть что угодно по вашему желанию.Их также может быть любое количество.

Когда дело доходит до компиляции кода, make очень полезен, потому что вы можете использовать его для перекомпиляции двоичного файла (также называемого исполняемым файлом), если исходные файлыизменяются, и это именно то, что вам нужно.

Например, этот make-файл создает двоичный файл (исполняемый файл) из двух исходных файлов (и без заголовочных файлов):

# Makefile

# executable file is called "prog"
prog: a.o b.o
    gcc -o prog a.o b.o
    #   ^^^^^^^
    #    tell gcc to name the output file "prog"

# compile the first source file "a.c" to produce the object file "a.o"
a.o: a.c
    gcc -c a.c

# compile the second source file "b.c" to produce the object file "b.o"
b.o: b.c
    gcc -c b.c

Еслиу вас есть файлы заголовков, тогда вам нужно изменить строки компиляции следующим образом:

# Makefile

# ...

# compile a.c, which has an associated header file a.h 
a.o: a.c a.h
#        ^^^ add the header file here
    gcc -c a.c

Если вам не ясно, что такое файлы заголовков, найдите их где-нибудь или задайте другой вопрос о них.

0 голосов
/ 26 сентября 2019

Вы можете использовать следующий Makefile:

all: thr_atomic thr_reduce

thr_atomic: thr_atomic.c 
gcc thr_atomic.c -lm -pthread 

thr_reduce: thr_reduce.c 
gcc thr_reduce.c -lm -pthread <newline>

Однако, поскольку кажется, что эти две программы полностью независимы, я бы лучше сделал два отдельных make-файла.

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