Зацикливание make-файла с несколькими основными функциями - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь написать make-файл, который может создать один исполняемый файл для каждой основной функции.

У меня есть список файлов: main1.cpp, main2.cpp и main3.cpp.Каждый из них содержит функцию int main().Очевидно, что я не могу встроить их в один exec, который здесь не является целью, так как я могу встроить каждый из них в свой собственный исполняемый файл?Это одно из решений:

main1: main1.cpp
    $(CC) -o $@ $^
main2: main2.cpp
    $(CC) -o $@ $^
main3: main3.cpp
    $(CC) -o $@ $^

Но ДОЛЖЕН быть лучший способ сделать это.Есть ли какая-то функция зацикливания в make-файлах, которая облегчит этот процесс?Как для цикла?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Смесь wildcard, patsubst и статических шаблонных правил , плюс стандартные переменные make для компиляции и связывания C ++:

SRCS := $(wildcard main*.cpp)
EXES := $(patsubst %.cpp,%,$(SRCS))

$(EXES): %: %.cpp
    $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS)

Но как make уже знает, какчтобы сделать все это, вы также можете избавиться от своего Makefile и просто набрать make main1 ...

0 голосов
/ 25 декабря 2018

Хотя это не очень сложный make-файл, ваше решение подходит для трех простых программ.Вы можете сделать его более общим и поддерживать построение всех трех целей одновременно с помощью цели «все».

all: main1 main2 main3
main1: main1.cpp
    $(CC) -o $@ $^
main2: main2.cpp
    $(CC) -o $@ $^
main3: main3.cpp
    $(CC) -o $@ $^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...