KDevelop 4.7.1 jak na custom includes/imports??

Bob

KDevelop 4.7.1 jak na custom includes/imports??
« kdy: 01. 08. 2015, 10:40:50 »
Ahoj všichni,
mám násl. problém s výše uvedeným IDE KDevelop.
Chci vyvíjet program v c, který používá nějaké custom knihovny, které mám uložené kdesi v home adresáři - tedy mimo standardní include cesty.
Pomocí "CMake C" template vygeneruji nový projekt.
Následně v menu "Project" -> "Open configuration..." -> "Custom defines and includes" nadefinuji cesty k těm svým knihovnám (k header filům a ke zdrojákům).


Když pak do main.c napíši #include "NejakyMujHedrfajl.h", tak editor k němu cestu najde  - vidí jej a rozpozná ho. Vše funguje jak je očekáváno.
Pokud ale dám build, tak skončím s errorem, že  ten NejakyMujHedrfajl.h - file not found
Pokud do include dám pevnou cestu (např. #include "/home/boban/custom/superlib/NejakyMujHedrfajl.h") , tak jej překladač sice najde, ale stále končí s errorem "undefined reference" na funkce deklarované v tom hedrfajlu, protože stále nevidí patřičný zdroják.
Prostě a jednoduše - KDevelop ta moje custom nastavení nezohlední v generování Makefile. Evidentně je zohledňuje pouze v rámci editoru.
Safra, kde dělám chybu? Jak na to aby KDevelop ty moje custom cesty zohledňoval v build procesu??
Předem děkuji všem, kdo mi odpoví něco kloudného k věci. Neodpustím si poznámku - prosím ne reakce typu "Proč nepoužíváš Eclipse, Qt Creator, Netbeas, Anjuta, vi, vim, CoJaVimCoVsechnoJeste?". Rád bych se držel pouze tématu KDevelop a definování custom cest. Děkuji. :)


Petr

Re:KDevelop 4.7.1 jak na custom includes/imports??
« Odpověď #1 kdy: 01. 08. 2015, 12:16:24 »
Ahoj,
Nedávno jsem zkoušel KDevelop a pokud jsem to správně pochopil, tak pro sestavení programů používá CMake.
To že jsi nastavil cesty k hlavičkovým souborům v konfiguraci KDevelopu je dobré pro kontrolu syntaxe editorem, ale nemá vliv na sestavení.
Proto musíš ještě editovat soubor CMakeList.txt, kde musíš přidat direktivu include_directories(../cesta/k/hlavičkovým/souborům).

Chyba "undefined reference" znamená, že nemůže najít objektové soubory (.o), ve kterých jsou definované symboly, které jsi již v programu použil (které máš ve svých zdrojácích deklarované), což ve výsledku znamená, že musíš přidat další direktivu do CMakeList.txt, která přidá linkeru při sestavení projektu cestu k potřebným objektovým soborům.

Neviditelný

Re:KDevelop 4.7.1 jak na custom includes/imports??
« Odpověď #2 kdy: 01. 08. 2015, 12:20:09 »
Jak na to aby KDevelop ty moje custom cesty zohledňoval v build procesu??
KDevelop je jen editor kódu, sám nic nesestavuje. Sestavení zařídí až build system, v vašem případě tedy CMake. Pokud kompilace selže na "undefined reference", nejspíš vám v CMakeLists.txt chybí "target_link_libraries(...)" pro knihovnu, kterou váš projekt linkuje.  Pro přidání vlastní cesty k hlavičkovým souborům musíte v CMakeLists.txt mít "include_directories(/cesta/k/souborum)".

Bob

Re:KDevelop 4.7.1 jak na custom includes/imports??
« Odpověď #3 kdy: 01. 08. 2015, 12:36:59 »
Ahoj,
Nedávno jsem zkoušel KDevelop a pokud jsem to správně pochopil, tak pro sestavení programů používá CMake.
To že jsi nastavil cesty k hlavičkovým souborům v konfiguraci KDevelopu je dobré pro kontrolu syntaxe editorem, ale nemá vliv na sestavení.
Proto musíš ještě editovat soubor CMakeList.txt, kde musíš přidat direktivu include_directories(../cesta/k/hlavičkovým/souborům).

Chyba "undefined reference" znamená, že nemůže najít objektové soubory (.o), ve kterých jsou definované symboly, které jsi již v programu použil (které máš ve svých zdrojácích deklarované), což ve výsledku znamená, že musíš přidat další direktivu do CMakeList.txt, která přidá linkeru při sestavení projektu cestu k potřebným objektovým soborům.

Ahoj,
děkuji za odpověď. Už jsem na to přišel také, zrovna jsem to sem psal, když přišla tvoje odpověď.
Že KDevelop není propojené s CMake (příp. make - záleží na použité template) a ty additional custom paths je teda třeba zadat na dvou různých místech, která nejsou vzájemně propojena, to se mě jeví jako opravdu hodně pitomé. Myslel jsem, že tohle je jedna z naprosto základních schopností každého IDE, aby ze svého nastavení automaticky vygeneroval patřičné soubory pro překlad.
Ad. "undefined reference" - já význam té hlášky chápu. Prostě nebyl nalezen zdroják a nemohl tedy ani být vytvořen object file. To je právě dáno tím, že cmake neví o těch dodatečných cestách. 


Jak na to aby KDevelop ty moje custom cesty zohledňoval v build procesu??
KDevelop je jen editor kódu, sám nic nesestavuje. Sestavení zařídí až build system, v vašem případě tedy CMake. Pokud kompilace selže na "undefined reference", nejspíš vám v CMakeLists.txt chybí "target_link_libraries(...)" pro knihovnu, kterou váš projekt linkuje.  Pro přidání vlastní cesty k hlavičkovým souborům musíte v CMakeLists.txt mít "include_directories(/cesta/k/souborum)".

Hmmm, naivně jsem se domníval, že je KDevelop něco víc.
Nemohu si odpustit jedno neproduktivní rýpnutí.
Vždyť tyhle schopnosti - možnost v IDE nastavit additional custom paths a následně se dle tohoto nastavení chovat jak v editoru, tak také s tím i počítat v build procesu, to už perfektně fungovalo ve Visual C++ 5.0, které vyšlo před nějakými dcaceti roky. :P

Bob

Re:KDevelop 4.7.1 jak na custom includes/imports??
« Odpověď #4 kdy: 01. 08. 2015, 13:04:26 »
Tak po několika dalších pokusech jsem zjistil, že KDevelop žádné build soubory (Makefile, CMakeLists.txt,...) negeneruje. Tohle se vygeneruje pouze jednorázově během zakládání nového projektu dle šablony a pak už je nutné veškeré další úpravy provádět přímou editací těch souborů, přičemž nastavení KDevelop se nijak v těchto souborech neodráží. Hmmm, buď jsem kolem toho něco těžce nepochopil, nebo je KDevelop v podstatě pouhý editor možná jen ja trochu vyšší úrovni, než je např editor Kate, ale žádné IDE to ve skutečnosti není. :P


Neviditelný

Re:KDevelop 4.7.1 jak na custom includes/imports??
« Odpověď #5 kdy: 01. 08. 2015, 14:36:50 »
KDevelop umí upravovat CMakeLists.txt jen na základní úrovni, např. po přidání nové třídy v C++ sám nabídne přidání .cpp souboru do pole zdrojáků. Vzhledem k tomu, že CMake je hodně komplexní build system se to dá tak nějak pochopit. Kdo chce psát v KDevelopu, musí nějakou znalost CMake mít. Na druhou stranu KDevelop umí docela dobře obarvovat syntaxi, má šikovný autocomplete a protože je postaven na KatePart, umí všechny s tím spojené vychytávky (minimapa místo scrollbaru, označení upravených a neuložených změn, VI režim, ...)