如何避免使用autotools在不同路径中重新编译不同的目标?

时间:2012-03-20 21:22:26

标签: release target autotools automake

我已经可以编译不同的目标或版本(调试版本),但问题是当我创建:make debugmake release时,这会在相应的文件夹文件夹中生成对象和库。

这是Makefile.am:

AM_CXXFLAGS = @AM_CXXFLAGS@

ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}

lib_LIBRARIES = libInitDB.a

libInitDB_a_SOURCES = \
InitDB.cpp

.PHONY: debug release

debug:
    make CXXFLAGS='$(CXX_DEBUG_FLAGS) $(CXXFLAGS)'
    mkdir -p $(DEBUG_DIR)
    mv $(lib_LIBRARIES) $(DEBUG_DIR)/$(lib_LIBRARIES)
    mv *.o $(DEBUG_DIR)

release:
    make CXXFLAGS='$(CXX_RELEASE_FLAGS) $(CXXFLAGS)'
    mkdir -p $(RELEASE_DIR)
    mv $(lib_LIBRARIES) $(RELEASE_DIR)/$(lib_LIBRARIES)
    mv *.o $(RELEASE_DIR)    

但问题是,当我移动对象和库时,再次生成:make debugmake release,再次生成已存储在调试或释放文件夹中的对象和库

有人可以帮我找到如何避免这种情况以及当我在正确的文件夹中编译该搜索时吗?

1 个答案:

答案 0 :(得分:2)

您可以使用不同的选项配置两个单独的构建目录,而不是让一个Makefile生成两种目标。

例如:

mkdir debug
(cd debug && ../configure --enable-debug)

mkdir release
(cd release && ../configure --enable-release)

这样,您只需输入make即可转到任一目录并重新编译所需内容。