Как избежать перекомпиляции разных целей по разным путям с помощью автоинструментов? - PullRequest
0 голосов
/ 21 марта 2012

Я уже мог скомпилировать разные цели или разновидности (отладочный выпуск), но проблема в том, что когда я делаю: 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 Ответ

2 голосов
/ 22 марта 2012

Вместо того, чтобы один Makefile генерировал оба варианта ваших целей, вы могли бы иметь две отдельные директории сборки, настроенные с разными параметрами.

Например:

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

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

Таким образом, вы можете перейти в любой каталог и перекомпилировать только то, что нужно, просто набрав make.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...