Portál AbcLinuxu, 8. května 2025 18:11
diky za nazory, taky jsem si nejdrive myslel, ze to bude mit neco spolecneho s hardware, ale pak jsem to zavrhl, protoze by jinak binarni soubory nebyly vpodstate prenositelne - tedy si myslim.
U gcc je potřeba rozlišit dva parametry ovlivňující výsledný kód ve smyslu optimalizace pro konkrétní třídu procesorů. První je "-march
", který definuje, jaká instrukční sada se použije; tam skutečně může dojít k tomu, že zvolím-li modernější model, využijí se instrukce, které na starších procesorech mohou chybět a kód tam nepoběží. Druhou je "-mtune
", která pouze ovlivní to, jak překladač bude optimalizovat využití registrů a řazení instrukcí podle zvoleného modelu procesoru; na jiném může být výsledný kód o něco méně efektivní než kód optimalizovaný přímo pro něj, ale poběží.
U obou jde použít hodnotu "native
" a pak se použije instrukční sada resp. optimalizace podle procesoru, na kterém je spuštěn překladač. To je ale také jediný případ, kdy výsledný kód závisí na tom, kde se překládalo. Může to být výhodné, když počítáte s tím, že se program bude spoouštět právě jen na tomto počítači (nebo na jiných se stejným modelem procesoru); v jakémkoli jiném je lepší použít nějaké konkrétní hodnoty.
fprintf(stdout, "This is program version %s.\n", __DATE__);ten program je stary 20 let - uprimne receno bych rekl, ze to neni dobra myslenka?
Není to dobrá myšlenka, ale bohužel se s tím člověk pořád občas potká.
to jsem myslel ze je bez optimalizace - kvuli debuggu ??
Těžko říct. Absence optimalizace sice tu a tam může při debugování trochu pomoci, ale rozhodně to není důvod ji vypínat předem.
fprintf(stdout, "This is program version %s.\n", __DATE__)Co je na tom obecne spatne ? pouzivam neco velice podobneho pri vypsani helpu ci verze jen tam pouzivam misto data odkaz na gitovy commit a datum kompilace jen jako version of GCC VERSION at _DATE a popripade i hostname stroje na kterem to bylo prelozeno ...
Kdyby tam bylo datum toho příslušného commitu (a build byl vždy ze stejné větve), tak by to za určitých okolností smysl mít mohlo. Ale označovat datum buildu za verzi, je naprostý nesmysl, protože když si udělám checkout tři roky staré verze a přeložím ji, bude se vydávat za novější než ta, kterou jsem přeložil včera z aktuálních zdrojáků.
Dávat do binárky datum buildu, build host, verzi překladače a kdoví co všechno sice na první pohled vypadá strašně cool, ale za dvacet let, co se s Linuxem potýkám, si nevzpomínám, že by mi tento typ informací byl (v binárce samotné) k něčemu užitečný. V prostředí jako OBS už je to pak vysloveně škodlivý zlozvyk, protože to zbytečně vynucuje nové a nové rebuildy, ke kterým by jinak nebyl žádný důvod. Proto třeba OBS při zjištění, že se něco takového děje, hlásí warning.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.