Make,端点因预编译器标志而异

时间:2019-04-18 10:38:48

标签: c++ makefile precompiler

使用make,我需要生成一个可执行文件的两个版本,这两个版本的不同之处在于使用了预编译器标志DXYZ。到目前为止,我的工作方式是为香草程序生成*.o对象,并为使用*.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

0 个答案:

没有答案