Make, конечные точки, которые различаются по флагу прекомпилятора - PullRequest
1 голос
/ 18 апреля 2019

Используя 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
...