Jak nenačíst soubory z adresáře projektu

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
otula
Příspěvky: 9
Registrován: 03 bře 2019, 00:07
Reputation: 0

Jak nenačíst soubory z adresáře projektu

Příspěvek od otula » 06 bře 2019, 22:56

Chtěl bych poprosit ještě o jednu radu, na víceméně opačný problém, než jsem položil ve svém prvním dotazu.

Mám adresář s projektem a spolu s *.ino souborem tam mám ještě soubory abcd.h a abcd.cpp. Problémem je, že při kompilaci projektu se mi abcd.* soubory načtou, i když si to nepřeji.

Příklad: v hlavním *.ino souboru mám něco takového:

Kód: Vybrat vše

#ifdef ABCD
	#include "abcd.h"
#endif


Tedy, přeji si načíst abcd.h jen v případě, že mám definován identifikátor ABCD, v opačném případě ho načíst nechci. Jenže kompilátor ho načte bez ohledu na to, zda ho includuji, či neincluduji. Zkoušel jsem abcd.* soubory dát do podadresáře, jenže to potom nejdou načíst vůbec, protože od verze 1.6.10 je to zakázáno. Poradíte mi, jak na to?

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Jak nenačíst soubory z adresáře projektu

Příspěvek od gilhad » 07 bře 2019, 00:28

IMHO používat příčetnější prostředí, než Arduino IDE (které za tebe udělá všechno, co si myslí, že bys měl udělat, ale zapoměl jsi - jako deklarovat funkce před použitím, načíst všeshny soubory z aktuálního adresáře a tak)

Ještě by stálo za to zkusit udělat adresář abcd a do něj dát to abcd.cpp abcd.h a použít #include "abcd/abcd.h" jestli to teda projde.

Jinak ještě zkusit to abcd.* dát do home/username/Arduino/libraries/abcd/ nebo kam u tebe Arduino dává knihovny ... a použít #include <abcd/abcd.h>

Pokud se něco z toho povede, napiš i pro ostatní, co funguje :)

otula
Příspěvky: 9
Registrován: 03 bře 2019, 00:07
Reputation: 0

Re: Jak nenačíst soubory z adresáře projektu

Příspěvek od otula » 07 bře 2019, 07:19

Děkuji za odpověď, každopádně z toho podadresáře to nenačte, ani když má stejný název jako ta knihovna. A z adresáře s knihovnami by to fungovalo v pohodě, ale tam to mít nechci, chtěl bych to mít pohromadě s tím ino souborem. Zkusím ještě experimentovat a uvidím, jestli se mi podaří něco vykoumat :)

otula
Příspěvky: 9
Registrován: 03 bře 2019, 00:07
Reputation: 0

Re: Jak nenačíst soubory z adresáře projektu

Příspěvek od otula » 07 bře 2019, 09:41

Hm, tak teda nevím...

Pokud by šlo jen o to načtení či nenačtení, vypadá to, že by mělo fungovat tohle:

Kód: Vybrat vše

// ino soubor

#define ABCD

#ifdef ABCD
  #include "abcd.h";
#endif

Kód: Vybrat vše

// abcd.h

#ifndef ABCD
  #define ABCD
#endif

Kód: Vybrat vše

//abcd.cpp

#include "abcd.h";

#ifdef ABCD
/* samotný obsah souboru */
#endif
Pokud bych ABCD v abcd.h znovu nedefinoval, cpp soubor by o jeho existenci nevěděl. Jenže s tímto narazím ve chvíli, kdy nechci na základě existence identifikátoru pouze načíst či nenačíst jiný soubor, ale potřebuji skutečně zjistit, zda byl či nebyl definován:

Kód: Vybrat vše

// ino soubor

#define DEBUG

#ifdef DEBUG
   #define DEBUG_PRINT(x)     Serial.print(x)
   #define DEBUG_PRINTLN(x)   Serial.println(x)
#else
   #define DEBUG_PRINT(x)
   #define DEBUG_PRINTLN(x)
#endif

Kód: Vybrat vše

// abcd.cpp

...
DEBUG_PRINT("neco chytreho");
...
Teď už v souboru abcd.h nemohu testovat neexistenci, protože ta platí vždy. Jistě, je to už úplně jiný problém, než na jaký jsem se ptal, ale narazil jsem na něj právě při hledání řešení...

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Jak nenačíst soubory z adresáře projektu

Příspěvek od gilhad » 07 bře 2019, 11:43

Pokud ti jde o moznost definovat DEBUG_PRINT pro *.ino i abcd.cpp naraz, na jednom miste, pak bytch na to sel zcela jinak (abcd.cpp se klidne muze kompilovat driv nez *.ino a nejspis se driv kompiluje)

debug.h:

Kód: Vybrat vše

#ifndef DEBUG_H
#define DEBUG_H

#define DEBUG

#ifdef DEBUG
   #define DEBUG_PRINT(x)     Serial.print(x)
   #define DEBUG_PRINTLN(x)   Serial.println(x)
#else
   #define DEBUG_PRINT(x)
   #define DEBUG_PRINTLN(x)
#endif

#endif

abcd.h:

Kód: Vybrat vše

.....
#include "debug.h"
.....
*.ino:

Kód: Vybrat vše

.....
#include "debug.h"
.....

otula
Příspěvky: 9
Registrován: 03 bře 2019, 00:07
Reputation: 0

Re: Jak nenačíst soubory z adresáře projektu

Příspěvek od otula » 07 bře 2019, 13:05

Chtěl jsem mít všechny volby a všechna nastavení pospolu, což bych tímto porušil, ale stejně moc děkuji, protože jsi mě tím navedl na zřejmě správnou cestu - došlo mi, že je přece nemusím mít v tom ino souboru, ale mohu si udělat například soubor Setup.h a všechny tyhle záležitosti přesunout do něj, aby byly hezky pohromadě, přičemž mi to umožní způsobem, který popsals, vyřešit můj problém.

Takže opět velké díky!

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 17 hostů