使用 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