Kurs pisania makefile

Kurs pisania makefile
cpp_beginer
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:105
0

Nigdy jakoś szczególnie nie zagłębiałem się w ten temat. Szukam kursu pisania makefile lub jakiegoś większego projektu na githubie abym mógł podpatrzeć jak pisać dobre makefile dla dużych projektów tak aby można było każdy moduł kompilować osobno jak i również robić clean. Do tego dodawać flagi kompilacji aby można było budować kilka wariantów aplikacji. Czyli to co można spotkać na rozmowach i w projektach komercyjnych.

edytowany 1x, ostatnio: cpp_beginer
UH
  • Rejestracja:ponad 5 lat
  • Ostatnio:12 miesięcy
  • Postów:10
3

Ja bym zaczął od https://www.gnu.org/software/make/manual/make.html. Jest tam nawet większy przykład w Appendix C Complex Makefile Example

DO
  • Rejestracja:około 5 lat
  • Ostatnio:3 miesiące
  • Postów:85
3

Polecam zapoznać się z cmake, który może trochę uprościć cały proces tworzenia makefile'a

BG
Popieram, ewentualnie warto jeszcze zerknąć na Meson
several
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 10 godzin
2
_dominik napisał(a):

Polecam zapoznać się z cmake, który może trochę uprościć cały proces tworzenia makefile'a

Strata czasu. ...może trochę uprościć... to zysk nie warty inwestycji biorąc pod uwagę, że poświęcasz czas na naukę kompletnie innej składni. Poza tym, jedyne elementy wspólne jakie przychodzą mi na myśl to składanie wywołania kompilacji lub linkowania, ale nie widzę powodu dla którego miałbym uczyć się jak to robić w dwóch systemach budowania jeśli interesuje mnie tylko jeden z nich.

@cpp_beginer ja osobiście makefile'a uczę się na bieżąco, chcę zrobić X więc szukam w manualu bądź przykładach jak to X zrobić. Jedyne co musisz zrozumieć na początku, to specyfikę składni oraz w jaki sposób make interpretuje makefile'a. Jako punkt startowy masz przykład makefile'a, którego napisałem "z palca", który realizuje "Incremental Build" kompilując pliki z kilku folderów https://github.com/pdy/simpleopenssl/blob/master/Makefile Nie jest doskonały, ale jest prosty w zrozumieniu.


edytowany 3x, ostatnio: several
BG
  • Rejestracja:prawie 6 lat
  • Ostatnio:8 dni
  • Postów:287
5

@several:
Narzędzia takie jak CMake albo Meson nie są odpowiednikami make, ale raczej "następnym etapem ewolucji".
Make jest fajny do małych i prostych projektów, ale nie skaluje się zbyt dobrze... Próbowałeś kiedyś napisać makefile dla dużego projektu, który powinien się budować nie tylko na Twoim komputerze ale na dowolnym współczesnym systemie operacyjnym ? Próbowałeś może kiedyś napisać własną konfigurację dla autotools ? Jeśli nie, to nie wiesz (jeszcze) w czym problem. Jeśli tak, to powinieneś rozumieć dlaczego CMake jest jedynym przyszłościowym rozwiązaniem ;)

@cpp_beginer
Poczytaj sobie
https://stackoverflow.com/questions/25789644/difference-between-using-makefile-and-cmake-to-compile-the-code

nalik
No bez przesady, widziałem parę naprawdę sporych projektów z gołym make, nie wygenerowanych przez cmake. Aczkolwiek trzeba przyznać, że ilość roboty rośnie i trzeba w zasadzie programować buildsystem. Widziałem też spore projekty z cmake. W obu wypadkach będą problemy. Dla mnie sensowną zaletą cmake jest to, że mogę podmienić potem wygenerowane make na coś innego, np. na ninja.
enedil
My pisaliśmy w projekcie makefile, ktory nam generował różne dockerfile xd
several
...powinieneś rozumieć dlaczego CMake jest jedynym przyszłościowym rozwiązaniem cmake to nie przyszłość a teraźniejszość, mam nadzieję że w przyszłości będą lepsze narzędzia.
BG
@enedil: Wiesz, ja kiedyś napisałem makefile który generował CMake, który generował właściwego Makefile (automat do budowania projektów studenckich pisanych w nie wiadomo czym ;) ) @several prawda
Satanistyczny Awatar
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 21 godzin
  • Postów:699
1

W pracy korzystałem zarówno z make, gmake jak i cmake, no i kmake. :P

several
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 10 godzin
3
Bartłomiej Golenko napisał(a):

@several:
Narzędzia takie jak CMake albo Meson nie są odpowiednikami make, ale raczej "następnym etapem ewolucji".
Make jest fajny do małych i prostych projektów, ale nie skaluje się zbyt dobrze... Próbowałeś kiedyś napisać makefile...

@Bartłomiej Golenko co to ma do rzeczy i dlaczego czujesz potrzebe edukowania mnie w tak protekcjonalny sposób? Zresztą nie ważne. @cpp_beginer konkretnie zapytał o kursy pisania makefile'a więc przekierowywanie uwagi na inny system to czysty offtopic. Można by ewentualnie dodać jakieś post scriptum, ale gdy pytanie brzmi tak:

Kopiuj
Znacie jakieś kursy Makefile'a`?

to zwykłym nonsensem jest odpowiadanie "poucz się cmake'a" w pierwszym zdaniu.


BG
Wybacz, nie było moim celem edukowanie Cię w protekcjonalny sposób. Ale potrzebę edukowania faktycznie czuję ;). W tym konkretnie przypadku poczułem, bo napisałeś że nauka cmake to "zysk nie warty inwestycji". Co do sensowności polecania cmake - w przypadku początkującego naprowadzenie na lepsze narzędzie nie jest chyba nonsensem ?
several
Ten komentarz odnosił się do do sugestii jakoby warto było najpierw zaznajomić się z cmake bo potem z make jest prościej, wg mnie nauka dwóch różnych składni gdy zależy nam na jednej z nich to strata czasu. Nauka cmake jako takiego jak najbardziej polecam.
BG
Hmm, to nie był mój komentarz, ale jest w sumie poprawny - tyle że "uprości" trzeba rozumieć jako "wygeneruje automatycznie"
MO
  • Rejestracja:prawie 10 lat
  • Ostatnio:3 dni
  • Lokalizacja:Tam gdzie jest (centy)metro...
4

Godnego polecenia kursu nie znam, bo sam uczyłem się z książki oraz w trakcie pisania projektów.
Możesz rozważyć zapoznanie się z:
https://www.oreilly.com/openbook/make3/book/index.csp
https://www.coursera.org/lecture/introduction-embedded-systems/1-introduction-to-build-systems-using-gnu-toolsets-7KkWV

Tylko czy warto kurs? Sam oceń.
Do tego warto zapoznać się z pozycją:
https://accu.org/index.php/journals/2004

.. aby wiedzieć co może Cię czekać przy bardziej złożonych projektach.
Poza tym, poświęcanie sporego czasu nauki na "systemy budowania zbliżone do prędkości światła" ( :) ), nie zawsze jest rozsądną strategią. Przez dłuższy czas I/O będzie jeszcze wąskim gardłem.


Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
Miang
a kurs czytania makefile ktoś zna?
GI
GI
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:3
1

Jezeli chodzi o kurs, mysle ze moze byc ciezko. Pewnie wiekszosc ludzi zgodzi sie ze stwierdzeniem, ze kazdy projekt jest na tyle specyficzny, ze znalezienie jednego, idealnego sposobu pisania Makefile'i jest trudne.

Jezeli chodzi o ksiazki, to goraco polecam te dwie pozycje: https://nostarch.com/gnumake oraz https://nostarch.com/autotools2e - jedna o GNU Make a druga o tym, jak podejsc do bardziej skomplikowanych projektow z uzyciem autotools. Te ksiazki to przyklad typowo amerykanskiej literatury naukowej, czyli sposobu prezentacji tematow skomplikowanych w sposob bardzo przystepny. Mozesz tez rzucic okiem na przyklady projektow - zeby zobaczyc jak robia to inni. Jezeli chcesz w miare skomplikowany przyklad, ale podany na tacy, rzuc okiem tutaj (wprawdzie Fortran, ale zmiana na co innego nie bedzie skomplikowana): https://www.owsiak.org/fortran-and-gnu-make. Z kolei tutaj (https://gitlab.com/mkowsiak/converter) mozesz zobaczyc jak przy pomocy GNU Make zorganizowac budowanie przy pomocy wielu mniejszych Makefile'i - kazdy odpowiada za inna czesc projektu.

cpp_beginer
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:105
0

Najpierw zacznę od nauki pisania makefile, dopiero jak opanuję to przejdę do cmake.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)