Varför får jag alltid problem med "no such file or dictionary" när man länkar till headers i C/C++?

Permalänk

Varför får jag alltid problem med "no such file or dictionary" när man länkar till headers i C/C++?

När jag skapar mina headers så brukar jag alltid inkludera dom med #include "../../filens_namn.h" eller enbart "../". Allt beror på undermapparna.

Detta fungerar riktigt bra i Eclipse IDE. Men om jag överför projektet till t.ex. QT Creator, Kiel Microvision eller liknande IDE, då strular det ALLTID till med headers och projektet kan inte hitta dessa headers.

Varför blir det så?
Har Eclipse IDE någon magisk funktion så att den känner utav headers helt automatiskt?

Övrigt kan jag säga att min favorit IDE är Eclipse för den krånglar aldrig. Den är rätt tråkig dock när det kommer till utseende. Men den är ju över 20 år.

Permalänk
Hedersmedlem

Kan du se vilka argument som skickas till kompilatorn? Man kan specificera kataloger som den skall titta i, men det brukar inte göras automatiskt.

Permalänk
Medlem

Låter som att du kanske saknar någon PATH i settings?

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem
Skrivet av heretic16:

När jag skapar mina headers så brukar jag alltid inkludera dom med #include "../../filens_namn.h" eller enbart "../". Allt beror på undermapparna.

Detta fungerar riktigt bra i Eclipse IDE. Men om jag överför projektet till t.ex. QT Creator, Kiel Microvision eller liknande IDE, då strular det ALLTID till med headers och projektet kan inte hitta dessa headers.

Varför blir det så?
Har Eclipse IDE någon magisk funktion så att den känner utav headers helt automatiskt?

Övrigt kan jag säga att min favorit IDE är Eclipse för den krånglar aldrig. Den är rätt tråkig dock när det kommer till utseende. Men den är ju över 20 år.

För tydlighets skull, var ligger de två filerna i förhållande till varandra?

Skrivet av Elgot:

Kan du se vilka argument som skickas till kompilatorn? Man kan specificera kataloger som den skall titta i, men det brukar inte göras automatiskt.

Håller med principiellt, särskilt att kommandoraden för kompilatorn vore väldigt intressant.
Men med "" istället för <> så letar den ju först baserat på var den nuvarande filen ligger innan den börjar leta i de angivna include-katalogerna.
Dock är det väl ofta en bättre idé att ange vilka kataloger som som ska sökas i, särskilt om det är externa bibliotek som ska refereras, och isf rimligen också använda <>.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Hedersmedlem
Skrivet av evil penguin:

Men med "" istället för <> så letar den ju först baserat på var den nuvarande filen ligger innan den börjar leta i de angivna include-katalogerna.

Intressant är ju också vem som har rätt. Lyckas eclipse hitta filer som egentligen inte ligger på angiven plats eller är det övriga som misslyckas?

Permalänk
Medlem
Skrivet av Elgot:

Intressant är ju också vem som har rätt. Lyckas eclipse hitta filer som egentligen inte ligger på angiven plats eller är det övriga som misslyckas?

Det är väl dock inte Eclipse eller QT Creator som letar efter filer utan den kompilator de startat.
Frågan är väl kanske också om det ens är olika kompilatorer eller om det är samma som bara körs med olika argument.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Hedersmedlem
Skrivet av evil penguin:

Det är väl dock inte Eclipse eller QT Creator som letar efter filer utan den kompilator de startat.
Frågan är väl kanske också om det ens är olika kompilatorer eller om det är samma som bara körs med olika argument.

Mjo, jag menar snarare hela kedjorna som startar från eclipse respektive övriga.

Permalänk
Skrivet av Elgot:

Kan du se vilka argument som skickas till kompilatorn? Man kan specificera kataloger som den skall titta i, men det brukar inte göras automatiskt.

Tror du inte det har med -I för include inom Eclipse, men övriga kompilatorer saknar denna förmåga?

Låt oss säga att du har en header_A.h fil i en mapp A och en source_A.c fil i en mapp B. Men i mapp B så finns det en header_B.h fil som är till för source_B.c filen. Du vill inkludera denna header_A.h fil från mapp A i header_B.h filen som ligger i mapp B.

För att göra det i eclipse så kan du göra för header_B.h

#include "../../mapp_A/header_A.h"

Men skulle du flytta över hela projektet, CTRL + C och CTRL + V till en annan IDE t.ex. QT creator. Då helt plötsligt så hittar inte kompilatorn denna header_A.h filen som är inkluderad i header_B.h filen.

För att få detta fungera, så kompilatorn klarar utav att hitta filen, så skriver du projektes absoluta väg.

#include "src/mappar/mapp_A/header_A.h"

Detta tycker jag är jobbigt.
QT Creator och Kiel Microvision så måste jag göra det. Men i Eclipse-liknande verktyg så fixar detta sig automatiskt. Varför då?

Skrivet av Ferrat:

Låter som att du kanske saknar någon PATH i settings?

Det fungerar om jag har projektets aboluta väg, men sådant är jobbigt tycker jag att ändra.

Skrivet av evil penguin:

För tydlighets skull, var ligger de två filerna i förhållande till varandra?

Dom .c filerna och .h filerna ligger inte i samma mapp.

Permalänk
Hedersmedlem
Skrivet av heretic16:

Tror du inte det har med -I för include inom Eclipse, men övriga kompilatorer saknar denna förmåga?

Jo, jag är närmast övertygad om att det beror på sådana argument till kompilatorn (därför vore det intressant att se hela anropet), men det är inget som är unikt för eclipse och vilken kompilator den nu kör (gcc?). Dock brukar nog IDE:er vara försiktiga med att automatiskt lägga till sökvägar då det lätt blir kaotiskt.

Jag kan intyga att relativa inkluderingar fungerar fint även i Qt creator och visual studio, men jag har ju såklart inte testat just din konfiguration.

Permalänk
Medlem
Skrivet av heretic16:

Tror du inte det har med -I för include inom Eclipse, men övriga kompilatorer saknar denna förmåga?

Kompilatorn has nästan garanterat den förmågan, oavsett vilken kompilator du använder.
Däremot är det antagligen så att andra IDE inte skickar med samma argument med sökvägar till kompilatorn.

Permalänk
Skrivet av Elgot:

Jo, jag är närmast övertygad om att det beror på sådana argument till kompilatorn (därför vore det intressant att se hela anropet), men det är inget som är unikt för eclipse och vilken kompilator den nu kör (gcc?). Dock brukar nog IDE:er vara försiktiga med att automatiskt lägga till sökvägar då det lätt blir kaotiskt.

Jag kan intyga att relativa inkluderingar fungerar fint även i Qt creator och visual studio, men jag har ju såklart inte testat just din konfiguration.

När jag tittar i projektet. Så ser jag ingen -I som flagga i min makefile. Jag ser ingen makefile alls.

Skrivet av Erik_T:

Kompilatorn has nästan garanterat den förmågan, oavsett vilken kompilator du använder.
Däremot är det antagligen så att andra IDE inte skickar med samma argument med sökvägar till kompilatorn.

Men det lustiga är att min IDE kan se filerna och förstå att dom är där. Men kompilatorn kan inte det.

Permalänk
Hedersmedlem
Skrivet av heretic16:

När jag tittar i projektet. Så ser jag ingen -I som flagga i min makefile. Jag ser ingen makefile alls.

Man måste inte använda make, men det borde gå att se en fullständig logg över hur kompilatorn anropades när man byggde någonstans.

Citat:

Men det lustiga är att min IDE kan se filerna och förstå att dom är där. Men kompilatorn kan inte det.

Nu säger jag inte att så är fallet, men i teorin kan ju olika makron, flaggor och direktiv göra att de faktiskt har olika bild av hur verkligheten ser ut.

Permalänk
Skrivet av Elgot:

Man måste inte använda make, men det borde gå att se en fullständig logg över hur kompilatorn anropades när man byggde någonstans.

Nu säger jag inte att så är fallet, men i teorin kan ju olika makron, flaggor och direktiv göra att de faktiskt har olika bild av hur verkligheten ser ut.

Det ser ut så här när jag bygger projektet i Eclipse. Inga fel här.
Men skulle jag flytta min "src" mapp till ett annat projekt i en annan IDE. Ja, då får jag kaos.

Citat:

15:14:17 **** Incremental Build of configuration Debug for project Open-SAE-BLAS ****
Info: Internal Builder is used for build
gcc -std=c99 -O0 -g3 -Wall -c -fmessage-length=0 -o "Src\\Main.o" "..\\Src\\Main.c"
gcc -o Open-SAE-BLAS.exe "Src\\Hardware\\EWQ_Network\\EWQ_Network.o" "Src\\Hardware\\Memory\\FLASH_EEPROM_RAM_Memory.o" "Src\\ISO_BLAS\\ISO_BLAS-7_Application_Layer\\Auxiliary_Valve_Command.o" "Src\\ISO_BLAS\\ISO_BLAS-7_Application_Layer\\Auxiliary_Valve_Estimated_Flow.o" "Src\\ISO_BLAS\\ISO_BLAS-7_Application_Layer\\Auxiliary_Valve_Measured_Position.o" "Src\\ISO_BLAS\\ISO_BLAS-7_Application_Layer\\General_Purpose_Valve_Command.o" "Src\\ISO_BLAS\\ISO_BLAS-7_Application_Layer\\General_Purpose_Valve_Estimated_Flow.o" "Src\\Main.o" "Src\\Open_SAE_BLAS\\Listen_For_Messages.o" "Src\\SAE_BLAS\\SAE_BLAS-21_Transport_Layer\\Acknowledgement.o" "Src\\SAE_BLAS\\SAE_BLAS-21_Transport_Layer\\Request.o" "Src\\SAE_BLAS\\SAE_BLAS-21_Transport_Layer\\Transport_Protocol_Connection_Management.o" "Src\\SAE_BLAS\\SAE_BLAS-21_Transport_Layer\\Transport_Protocol_Data_Transfer.o" "Src\\SAE_BLAS\\SAE_BLAS-71_Application_Layer\\Request_Component_Identification.o" "Src\\SAE_BLAS\\SAE_BLAS-71_Application_Layer\\Request_ECU_Identification.o" "Src\\SAE_BLAS\\SAE_BLAS-71_Application_Layer\\Request_Software_Identification.o" "Src\\SAE_BLAS\\SAE_BLAS-73_Diagnostics_Layer\\DM1.o" "Src\\SAE_BLAS\\SAE_BLAS-73_Diagnostics_Layer\\DM14.o" "Src\\SAE_BLAS\\SAE_BLAS-73_Diagnostics_Layer\\DM15.o" "Src\\SAE_BLAS\\SAE_BLAS-73_Diagnostics_Layer\\DM16.o" "Src\\SAE_BLAS\\SAE_BLAS-73_Diagnostics_Layer\\DM2.o" "Src\\SAE_BLAS\\SAE_BLAS-73_Diagnostics_Layer\\DM3.o" "Src\\SAE_BLAS\\SAE_BLAS-81_Network_Management_Layer\\Address_Claimed.o" "Src\\SAE_BLAS\\SAE_BLAS-81_Network_Management_Layer\\Address_Delete.o" "Src\\SAE_BLAS\\SAE_BLAS-81_Network_Management_Layer\\Address_Not_Claimed.o" "Src\\SAE_BLAS\\SAE_BLAS-81_Network_Management_Layer\\Commanded_Address.o"

15:14:18 Build Finished. 0 errors, 0 warnings. (took 723ms)

Permalänk
Hedersmedlem
Skrivet av heretic16:

Det ser ut så här när jag bygger projektet i Eclipse. Inga fel här.
Men skulle jag flytta min "src" mapp till ett annat projekt i en annan IDE. Ja, då får jag kaos.

Hm, inga tecken på inkluderingsmappar. Hur ser det ut när det går fel?

Permalänk
Skrivet av Elgot:

Hm, inga tecken på inkluderingsmappar. Hur ser det ut när det går fel?

Hur det ser ut när det blir fel?
Ja, kompilatorn säger bara "no such file or dictionary"

Detta är SUPER vanligt inom QT Creator.

Jag menar. Om jag har alla mina headers och source i Src mappen och jag inkluderar headers i andra headers med hjälp utav #include "../../" metodiken. Då antar jag att det spelar ingen roll vart Src mappen befinner sig på datorn och inte ens vad den heter då den nämns aldrig när jag inkluderar headers i andra headers.

Permalänk
Hedersmedlem
Skrivet av heretic16:

Hur det ser ut när det blir fel?
Ja, kompilatorn säger bara "no such file or dictionary"

Ja, men med precis samma anrop?

gcc -std=c99 -O0 -g3 -Wall -c -fmessage-length=0 -o "Src\\Main.o" "..\\Src\\Main.c"

Permalänk
Skrivet av Elgot:

Ja, men med precis samma anrop?

gcc -std=c99 -O0 -g3 -Wall -c -fmessage-length=0 -o "Src\\Main.o" "..\\Src\\Main.c"

Så här ser det ut när kompilerar samma kod i QT Creator.

Här har jag tre rader kod.

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h" #include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h" #include "../SAE_BLAS_Enums/Enum_NAME.h"

Dom två första raderna inkluderar samma .h fil och "Enum_NAME.h" ligger i samm mapp - SAE_BLAS_Enums.

Men denna resulterar

#include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

C:\Users\...\Documents\GitHub-Workspace\BLASTester\Tools\Communication\BLAS\SAE_BLAS\SAE_BLAS-71_App_Layer\App_Layer.h:18: error: ../SAE_BLAS_Enums/Enum_Group_Function_Value.h: No such file or directory In file included from ..\BLASTester/Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS-21_Transfer_Layer/Transfer_Layer.h:14, from ..\BLASTester\Tools\Communication\BLAS\ISO_11783\ISO_11783-7_App_Layer\App_Layer.h:15, from ..\BLASTester\Tools\Communication\BLAS\ISO_11783\ISO_11783-7_App_Layer\General_Test_Estimated.c:8: ..\BLASTester/Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS-21_Transfer_Layer/../SAE_BLAS-71_App_Layer/App_Layer.h:18:10: fatal error: ../SAE_BLAS_Enums/Enum_Whole_Function_Value.h: No such file or directory #include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h" ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Men detta sätt att inkludera resulterar inga problem. Varför fungerar projektets absoluta väg bättre, i vissa fall? Inte alla med andra ord. Hm......

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

Permalänk
Medlem
Skrivet av heretic16:

Så här ser det ut när kompilerar samma kod i QT Creator.

Här har jag tre rader kod.

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h" #include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h" #include "../SAE_BLAS_Enums/Enum_NAME.h"

Dom två första raderna inkluderar samma .h fil och "Enum_NAME.h" ligger i samm mapp - SAE_BLAS_Enums.

Men denna resulterar

#include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

C:\Users\...\Documents\GitHub-Workspace\BLASTester\Tools\Communication\BLAS\SAE_BLAS\SAE_BLAS-71_App_Layer\App_Layer.h:18: error: ../SAE_BLAS_Enums/Enum_Group_Function_Value.h: No such file or directory In file included from ..\BLASTester/Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS-21_Transfer_Layer/Transfer_Layer.h:14, from ..\BLASTester\Tools\Communication\BLAS\ISO_11783\ISO_11783-7_App_Layer\App_Layer.h:15, from ..\BLASTester\Tools\Communication\BLAS\ISO_11783\ISO_11783-7_App_Layer\General_Test_Estimated.c:8: ..\BLASTester/Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS-21_Transfer_Layer/../SAE_BLAS-71_App_Layer/App_Layer.h:18:10: fatal error: ../SAE_BLAS_Enums/Enum_Whole_Function_Value.h: No such file or directory #include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h" ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Men detta sätt att inkludera resulterar inga problem. Varför fungerar projektets absoluta väg bättre, i vissa fall? Inte alla med andra ord. Hm......

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

Du anger ju två helt olika sökvägar när det fungerar och när det inte fungerar. Finns det någon rimlighet att båda borde fungera? Finns filen på flera ställen?

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Skrivet av evil penguin:

Du anger ju två helt olika sökvägar när det fungerar och när det inte fungerar. Finns det någon rimlighet att båda borde fungera? Finns filen på flera ställen?

Nej. Det är lika sökvägar.

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h" <- Absolut väg
#include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

Varför fungerar då denna?
#include "../SAE_BLAS_Enums/Enum_NAME.h"

Varför skriver jag inte så här?
#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_NAME.h"

Permalänk
Hedersmedlem
Skrivet av heretic16:

Låt oss säga att du har en header_A.h fil i en mapp A och en source_A.c fil i en mapp B. Men i mapp B så finns det en header_B.h fil som är till för source_B.c filen. Du vill inkludera denna header_A.h fil från mapp A i header_B.h filen som ligger i mapp B.

Kan man göra ett minimalt exempel baserat på detta?
Ser det ut såhär?

src/mappar/mapp_A/header_A.h src/mappar/mapp_B/header_B.h src/mappar/mapp_B/source_A.c src/mappar/mapp_B/source_B c

Permalänk
Hedersmedlem
Skrivet av heretic16:

Nej. Det är lika sökvägar.

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h" <- Absolut väg
#include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

Varför fungerar då denna?
#include "../SAE_BLAS_Enums/Enum_NAME.h"

Varför skriver jag inte så här?
#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_NAME.h"

Och var ligger filen du inkluderar ifrån?

Permalänk
Medlem
Skrivet av heretic16:

Nej. Det är lika sökvägar.

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h" <- Absolut väg
#include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

Varför fungerar då denna?
#include "../SAE_BLAS_Enums/Enum_NAME.h"

Varför skriver jag inte så här?
#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_NAME.h"

Det är inte möjligt för oss som inte vet var filerna ligger i förhållande till varandra samt vilka include paths som angivits till kompilatorn att förklara varför den ena eller den andra sökvägen fungerar i dina include-direktiv.
(Och det är förstås ännu mer hopplöst att förklara varför du skriver det ena eller det andra.)

Det jag kan konstatera är att ingen av sökvägarna är absolut, båda är tydligt relativa sökvägar (vilket är rimligt). Den uppenbara skillnaden är att den ena börjar med att navigera upp en katalog medan den andra dyker ned i katalogstrukturen direkt från aktuell katalog.

För tydlighets skull, vad #include "sökväg" betyder är:
Leta i första hand upp filen relativt nuvarande fil (filen där include-direktivet ligger), i andra hand relativt dina include paths (-I nånting till kompilatorn).

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Skrivet av Elgot:

Kan man göra ett minimalt exempel baserat på detta?
Ser det ut såhär?

src/mappar/mapp_A/header_A.h src/mappar/mapp_B/header_B.h src/mappar/mapp_B/source_A.c src/mappar/mapp_B/source_B c

Ja. Exemplet fungerar bra.
Men det bara i vissa fall problem sker. Och jag förstår inte varför.

Både Kiel och QT Creator har detta problem. Men inte andra IDE:er och dess kompilatorer.

Permalänk
Skrivet av Elgot:

Och var ligger filen du inkluderar ifrån?

Så är här sökvägen.

Filen som jag inkluderar dessa heter App.h.

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h" #include "../SAE_BLAS_Enums/Enum_NAME.h"

App.h ligger i BLAS/SAE_application/app.h och SAE_BLAS_Enums ligger i mappen BLAS

/BLAS/SAE_BLAS_Enums/Enum_NAME.h

Så jag går alltså ett steg uppåt i hierarkin, sedan går jag in i en annan mapp. Därför gör jag "../SAE_BLAS_Enums"

Permalänk
Hedersmedlem
Skrivet av heretic16:

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

Om app.h ligger under BLAS är det väl märkligt att detta fungerar (om det inte finns globala inkluderingsmappar definierade)?

Permalänk
Skrivet av Elgot:

Om app.h ligger under BLAS är det väl märkligt att detta fungerar (om det inte finns globala inkluderingsmappar definierade)?

Hur menar du?

Vi kan säga att jag har en mapp A och i denna mapp A finns det två undermappar B och C. I B och C finns det header-filer som jag vill inkludera.

Jag inkluderar alla header-filer från C i headerfilen som finns i B. Många fungerar att inkludera. Men vissa typ 2 stycken ger kompilatorerror.

Detta tycker jag är konstigt.

Permalänk
Hedersmedlem

@heretic16
Du har alltså (bland annat) filerna

Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h BLAS/SAE_application/app.h

och från app.h gör du dina inkluderingar.
1.

#include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

går upp ett steg till BLAS och sedan ned i SAE_BLAS_Enums. Detta borde väl misslyckas då det ligger en mapp SAE_BLAS mellan?

2.

#include "../SAE_BLAS_Enums/Enum_NAME.h"

samma här

3.

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

Här är SAE_BLAS med, men å andra sidan borde man inte kunna inkludera den sådär, utan snarare behöva säga

#include "../../../../Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

fast någonstans definieras kanske globala inkluderingsmappar.

Permalänk
Skrivet av Elgot:

@heretic16
Du har alltså (bland annat) filerna

Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h BLAS/SAE_application/app.h

och från app.h gör du dina inkluderingar.
1.

#include "../SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

går upp ett steg till BLAS och sedan ned i SAE_BLAS_Enums. Detta borde väl misslyckas då det ligger en mapp SAE_BLAS mellan?

2.

#include "../SAE_BLAS_Enums/Enum_NAME.h"

samma här

3.

#include "Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

Här är SAE_BLAS med, men å andra sidan borde man inte kunna inkludera den sådär, utan snarare behöva säga

#include "../../../../Tools/Communication/BLAS/SAE_BLAS/SAE_BLAS_Enums/Enum_Whole_Function_Value.h"

fast någonstans definieras kanske globala inkluderingsmappar.

Jag tror du krånglar till det.

Jag har alltså flera headerfiler i en mapp som jag inkluderar i en annan mapp. Men vissa av dessa headerfiler går inte att inkludera med /../../, utan man måste använda projektets absoluta sökväg, trots att dom ligger i exakt samma mapp som övriga headerfiler och dessa övriga headerfiler går att inkludera med /../../.

Så jag antar att Eclipse är kanske lite bättre på det där med att inkludera och förstå, medan övriga utvecklingsverktyg bara bråkar och säger "Så här ska det vara...annars får det vara!"?

Bug?

Permalänk
Hedersmedlem
Skrivet av heretic16:

Jag tror du krånglar till det.

Jag har alltså flera headerfiler i en mapp som jag inkluderar i en annan mapp. Men vissa av dessa headerfiler går inte att inkludera med /../../, utan man måste använda projektets absoluta sökväg, trots att dom ligger i exakt samma mapp som övriga headerfiler och dessa övriga headerfiler går att inkludera med /../../.

Så jag antar att Eclipse är kanske lite bättre på det där med att inkludera och förstå, medan övriga utvecklingsverktyg bara bråkar och säger "Så här ska det vara...annars får det vara!"?

Bug?

Förstår inte varför du använder relativa sökvägar för headerfiler när du inkluderar. Det är bara merarbete om du vill strukturera om filer i framtiden eller använda källkodsfilen i ett annat sammanhang. Vanligtvis inkluderar man bara filnamnet e.g "header.hpp" och sen pekar man ut för kompilatorn var den finns med sitt byggsystem. Enkelt och portabelt.

Permalänk
Skrivet av Shimonu:

Förstår inte varför du använder relativa sökvägar för headerfiler när du inkluderar. Det är bara merarbete om du vill strukturera om filer i framtiden eller använda källkodsfilen i ett annat sammanhang. Vanligtvis inkluderar man bara filnamnet e.g "header.hpp" och sen pekar man ut för kompilatorn var den finns med sitt byggsystem. Enkelt och portabelt.

Men hur kan man göra det i Eclipse?

Tänk dig att du har några headers, djupt nere, i en mapp. Ska du bara skriva headerfilens namn när du inkluderar? Sådant går icke!