Как мне заставить мой make-файл создать второй исполняемый файл? - PullRequest
0 голосов
/ 25 апреля 2020
all:  exe1 exe2

exe1: obj1
     g++ -Wall -Werror -std=c++11 program1.o -o program1  -lgtest

obj1:
     g++ -c -Wall -Werror -std=c++11 program1.cc

exe2: obj2
     g++ -Wall -Werror -std=c++11 program2.o -o program2

obj2:
     g++ -c -Wall -Werror -std=c++11 program2.cc

clean:
     rm *.o *.exe

Когда я запускаю make-файл, только целевой exe1 компилируется и создается в исполняемый файл. Если я делаю цель только exe2, я получаю сообщение об ошибке

make: Nothing to be done for `all'.

Как сделать exe2 видимым для make-файла?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Утилита make имеет много правил, упрощающих стандартную сборку. Компактная версия баночки Makefile будет:

PROGRAMS = program1 program2

all: $(PROGRAMS)

CXXFLAGS=-Wall -Werror -std=c++11 

# Link program1 with the gtest library
program1: LDLIBS=-lgtest

clean:
     $(RM) $(PROGRAMS) *.o

# Following section is needed only for binaries that need more than one object.
# Does not apply in the this case, since program1 depends only on program1.o.
# Included for allow extending the makefile.

program3: program3.o second.o # Additional objects here.
0 голосов
/ 25 апреля 2020

Makefile должен выглядеть примерно так:

# Set the dependencies to the names of the executables you
# want to build
all:  program1 program2

#
# Make uses some variables to define tools.
# The most important for you is CXX: Which is set to the C++ compiler.

#
# Notice that target name should match the executable name.
#     This is because `make` will check its existence and creation date
#     against its dependenc(ies) existence and creation date.
program1: program1.o
     $(CXX) -Wall -Werror -std=c++11 program1.o -o program1  -lgtest

program2: program2.o
     $(CXX) -Wall -Werror -std=c++11 program2.o -o program2

#
# We can generalize the creation of the object file.
%.o: %.cc
     $(CXX) -c -Wall -Werror -std=c++11 $*.cc

clean:
     $(RM) *.o *.exe
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...