Article View: pl.comp.os.linux.programowanie
Article #72606Re: wielokrotne make ze zmianą definicji
From: Marcin Konarski
Date: Thu, 21 Mar 2013 22:52
Date: Thu, 21 Mar 2013 22:52
72 lines
3347 bytes
3347 bytes
On Thu, 21 Mar 2013 21:47:15 +0100,
Sebastian Biały <heby@poczta.onet.pl> wrote:
> Takie problem: posiadam pewna aplikację którą muszę zbudować
> wielokrotnie za kazdym razem zmieniając pewną definicję. Jest to
> konkretnie częstotliwość kwarcu.
>
> Efektem czego ląduje z: kilkudziesięcioma odmianami plików .o,
> kilkunastoma plikami .elf.
>
> Taka praca dla make jest nienaturalna, raz wygenerowane pliki nie będą
> się chciały kompilować ponownie. A tutaj muszą się obligatoryjnie
> przebudować kilka razy.
>
> Z drugiej strony wole unikać dodawania do nazwy pliku ${FREQ} tworząc
> main-1157200.o, bo to znowu nie jest konsystentne z make i jego main.c
> -> main.o. Może należało by to wsadzić w katalog ${FREQ}?
>
> Jak to poprawnie rozwiązać? Zalożenie jest takie, że zmiana main.c
> spowoduje N-krotne przebudowanie main.o dla każdego FREQ z jakiejś
> listy. Lista jest "statyczna", tj jest gdzieś w zaasięgu wzroku make.
>
> Gorzej: bardzo możliwe że ten parametr to jeden z wielu ktore mogly by
> się zmieniać. Mam więc K-parametrów. Jak to zrobić bardziej ogolnie?
>
> Ze względu na niskopoziomowe dłubanie w kompilatorze (dekompilacje,
> skrypty linkujące i takie tam) interesują mnie raczej rozwiązania
> pozwalające kontrolować każdy element procesu. I oczywiście to jest
> kroskompilacja na nietypową architekturę...
To czego szukasz nazywa się "out of source(s) build".
Technicznie jest to dość skomplikowane i eleganckie rozwiązanie
to zestaw makefile'i (najlepiej z configure.ac) na kila tysięcy linii.
CMake również umożliwia "out of sources build".
Jeżeli chodzi o teorię to build odpala się z pustego katalogu
w którym jest automatycznie tworzona struktura katalogów
w której umieszczane są pliki wynikowe.
W moim prywatnym build systemie mam tak że wywołanie make ${TARGET}
automatycznie tworzy katalog build/${TARGET/ a w nim strukturę katalogów
analogiczną do tej z kodu źródłowego i w niej umieszcza pliki wynikowe.
Czyli po wywołaniu
$ make debug release ... ...
mam strukturę:
build/
debug/
dir1/
obj1.o
obj2.o
dir2/
obj1.o
exec
release/
dir1/
obj1.o
obj2.o
dir2/
obj1.o
exec
...
I tak dalej.
--
Huginn
GCS d? s: a C++$() UBLS++++$ P++ L++++$ E---
W+(-) N++ w-- O M- V- PS+ PE++ Y PGP-
t--- 5-- X- R !tv b++ DI+++ D+ G e* h r++ y**
Technical Details
Message-ID:
<slrnkkn3om.387.amok@ubiquitous.utgard.biz>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailReferences:
<kifrko$ubl$1@node1.news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Marcin Konarski <amok@utgard.beez> Newsgroups: pl.comp.os.linux.programowanie Subject: Re: wielokrotne make ze zmianą definicji Date: Thu, 21 Mar 2013 22:52:04 +0000 (UTC) Organization: ATMAN - ATM S.A. Lines: 72 Message-ID: <slrnkkn3om.387.amok@ubiquitous.utgard.biz> References: <kifrko$ubl$1@node1.news.atman.pl> Reply-To: huginn78@o2.pll NNTP-Posting-Host: 178-36-41-73.adsl.inetia.pl Mime-Version: 1.0 X-Trace: node1.news.atman.pl 1363906324 5554 178.36.41.73 (21 Mar 2013 22:52:04 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Thu, 21 Mar 2013 22:52:04 +0000 (UTC) User-Agent: slrn/pre1.0.0-18 (Linux) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit