Компиляция нескольких файлов C ++ с использованием make

0

Я пытаюсь использовать Makefile в первый раз. Можно ли скомпилировать 2 разных c++ программы в 2 исполняемых файла, используя один Makefile?

Вот что я сделал до сих пор, но он только скомпилирует первый.

CFLAGS=-O3 -Wall

series : ./problem1/series.cpp
    g++ $(CFLAGS) -o series ./problem1/series.cpp

gn : ./problem1/gn.cpp
    g++ $(CFLAGS) -o gn ./problem1/gn.cpp

РЕДАКТИРОВАТЬ:

Как я могу остановить его от компиляции каждый раз (если я не изменю код)?

CFLAGS=-O3 -Wall

all : q1_series q1_gn q1_series_new_initial

q1_series : ./problem1/series.cpp
    g++ $(CFLAGS) -o ./executables/q1_series ./problem1/series.cpp

q1_gn : ./problem1/gn.cpp
    g++ $(CFLAGS) -o ./executables/q1_gn ./problem1/gn.cpp

q1_series_new_initial : ./problem1/series1.cpp
    g++ $(CFLAGS) -o ./executables/q1_series_new_initial ./problem1/series1.cpp

    echo "Question 1 created in ./executables"
  • 1
    GNU make (стандартная make) чрезвычайно мощная и гибкая. Я предлагаю прочитать руководство или хорошую книгу. gnu.org/software/make/manual/make.html
Теги:
makefile

2 ответа

1

По умолчанию при запуске make make запускает правила для первой цели, которую видит. В вашем случае это будет цель series.

Вы можете вручную запускать любую другую целевую (ые) целевую систему, указав их в командной строке, например, make gn или make gn series.

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

Общее название для этой цели - all. Таким образом, вы должны добавить all: series gn до текущих целевых записей.

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

1

Да. Вы делаете "поддельную" цель, которая зависит от обеих других программ

all_programs : series gn 
  • 0
    Спасибо, что сработало!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню