Используя make, мне нужно создать две версии исполняемого файла, которые отличаются использованием флага прекомпилятора DXYZ
.До сих пор я работал над тем, чтобы создать объекты *.o
для программы vanilla и еще один набор *.o_xyz
для объектов, использующих флаг -DXYZ
.
Так что в основном яУ меня есть два правила для создания объектов, а именно: $(OBJ)/%.o: %.cpp
и $(OBJ)/%.o_xyz: %.cpp
.
Мне интересно, это лучший способ для этого?Можно ли свести это к одному правилу?
CXX=g++
OBJ=./obj
BIN=./bin
INC=-I./inc
CXXFLAGS=-std=c++11 -Wall -Wno-comment
LDFLAGS=-lpthread
CXX_SOURCES=$(wildcard *.cpp)
CXX_OBJECTS=$(patsubst %.cpp, $(OBJ)/%.o,$(notdir $(CXX_SOURCES)))
.PHONY: all
all : program_xyz program
program_xyz: $(addsuffix _xyz,$(CXX_OBJECTS))
@mkdir -p $(BIN)
$(CXX) -o $(BIN)/$@ $^ $(LDFLAGS) $(INC) -DXYZ
program: $(CXX_OBJECTS)
@mkdir -p $(BIN)
$(CXX) -o $(BIN)/$@ $^ $(LDFLAGS) $(INC)
##Vanilla Endpoints
$(OBJ)/%.o: %.cpp
@mkdir -p $(@D)
$(CXX) -c $< -o $@ $(INC) $(CXXFLAGS)
##Endpoint with DXYZ flag
$(OBJ)/%.o_xyz: %.cpp
@mkdir -p $(@D)
$(CXX) -c $< -o $@ $(INC) $(CXXFLAGS) -DXYZ