如何避免使用自动工具重新编译不同路径中的不同目标?
Posted
技术标签:
【中文标题】如何避免使用自动工具重新编译不同路径中的不同目标?【英文标题】:How avoid recompile different targets in different paths using autotools? 【发布时间】:2012-03-20 21:22:26 【问题描述】:我已经可以编译不同的目标或风格(调试版本),但问题是当我制作:make debug
或 make 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 debug
或 make release
时,当我移动对象和库时,会再次生成已存储在调试或发布文件夹中的对象和库。
有人可以帮助我找到如何避免这种情况以及何时在正确的文件夹中编译该搜索?
【问题讨论】:
【参考方案1】:您可以使用两个单独的构建目录配置不同的选项,而不是让一个 Makefile
生成两种类型的目标。
例如:
mkdir debug
(cd debug && ../configure --enable-debug)
mkdir release
(cd release && ../configure --enable-release)
这样,您可以转到任一目录并仅重新编译所需的内容,只需键入make
。
【讨论】:
您好,感谢您的回答,但是有可能在 Makefile.am 中制作一些东西而不是调用 2 次来 configure.ac?,这对我真的很有帮助。 @arimaujinn 不,我不知道有什么方法可以做到这一点,实际上我也不想知道。想想你想要什么:相同源的两个不同构建,使用不同的配置选项,每个都有自己的中间文件(*.o)和最终目标(库和可执行文件)。这正是构建目录的用途。现在没有什么能阻止您使用上面目录中的Makefile
自动创建/配置构建目录。以上是关于如何避免使用自动工具重新编译不同路径中的不同目标?的主要内容,如果未能解决你的问题,请参考以下文章