【问题标题】:How to add release target to Makefile?如何将发布目标添加到 Makefile?
【发布时间】:2016-06-23 10:12:00
【问题描述】:

我有以下 Makefile,我想将其配置为默认生成调试版本并通过指定相应的目标来发布版本。

我现在要解决的问题是,-项目包含单元测试,我希望它们包含在默认构建中,但从发布中排除,因此我将发布目标添加到 Makefile:

FC      = ifort
FFLAGS  = -c -free -module modules -g3 -warn all -warn nounused
LDFLAGS = -save-temps -dynamiclib

INTERFACES = src/Foundation.f units/UFoundation.f units/Asserts.f units/Report.f
EXCLUDES   = $(patsubst %, ! -path './%', $(INTERFACES))
SOURCES    = $(INTERFACES) \
             $(shell find . -name '*.f' $(EXCLUDES) | sed 's/^\.\///' | sort)
OBJECTS    = $(patsubst %.f, out/%.o, $(SOURCES))
EXECUTABLE = UFoundation

all: $(SOURCES) $(EXECUTABLE)

release: SOURCES := $(filter-out units/%.f, $(SOURCES))
release: OBJECTS := $(filter-out units/%.o, $(OBJECTS))
release: EXECUTABLE := 'Foundation.dlyb'
release: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    @echo 'Linking to $@...'
    @$(FC) $(LDFLAGS) $(OBJECTS) -o out/$@

out/%.o: %.f
    @echo 'Compiling $@...'
    @mkdir -p modules
    @mkdir -p $(dir $@)
    @$(FC) $(FFLAGS) -c $< -o $@

clean:
    @echo "Cleaning..."
    @rm -rf modules out $(EXECUTABLE)

不幸的是,它没有帮助 - 'make' 和 'make release' 的结果是相同的(make release 默认编译单元测试文件)。我已经看过类似的问题,例如How can I configure my makefile for debug and release builds?,但没有成功解决问题。

【问题讨论】:

    标签: makefile release gnu-make


    【解决方案1】:

    使用不同的宏(例如NDEBUG)和不同的优化级别构建调试和发布目标。您通常不想混合调试和发布目标文件,因此需要将它们编译到不同的目录中。

    我经常这样为不同的构建模式使用不同的顶级构建目录:

    BUILD := debug
    BUILD_DIR := build/${BUILD}
    

    编译器以这种方式标记:

    cppflags.debug :=
    cppflags.release := -DNDEBUG
    cppflags := ${cppflags.${BUILD}} ${CPPFLAGS}
    
    cxxflags.debug := -Og
    cxxflags.release := -O3 -march=native
    cxxflags := -g -pthread ${cxxflags.${BUILD}} ${CXXFLAGS}
    

    然后将您的对象构建到BUILD_DIR

    当您以make BUILD=release 调用它时,它会覆盖在makefile 中所做的BUILD := debug 分配。

    【讨论】:

    • @JohnPerry 你说的很对,纠正了我的回答。
    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多