Hoe het include-pad in het xcode-project in te stellen

Ik probeer een C-bibliotheek te gebruiken in een Objective-C Xcode-project.

De directorystructuur van de bibliotheken is als volgt:

-- include/
    |-- config.h
    |-- lib/
    |    |-- file1.h
    |    |-- file2.h
    |    |-- file3.h

In de documenten van de bibliotheek staat dat file1.h en file1.h file2.h en file3.h bevatten.

Ik krijg de foutmelding “bestand niet gevonden” voor de include van file2.h en file3.h`.
Ze worden op de volgende manier door file1.h opgenomen:

#include <lib/file1.h>
#include <lib/file2.h>

Ik lees hierdat deze haakjes geven de preprocessor opdracht om te zoeken naar include-bestanden langs het pad dat is opgegeven door de omgevingsvariabele INCLUDE, in plaats van te zoeken in dezelfde map als het bestand dat de #include bevat.

Dus ik heb de omgevingsvariabele INCLUDE in Xcode toegevoegd door naar Product->Bewerk Schema.. en stel het in op /the-whole-path-to/include/maar ik ben nog steeds het ophalen van het bestand niet gevonden fouten.

De bestanden zijn succesvol toegevoegd als ik file1.h verander om ze als volgt op te nemen:

#include "file2.h"

maar dat doe ik liever niet voor elk bestand in de bibliotheek.

Hoe kan ik dit oplossen?


Antwoord 1, autoriteit 100%

In versie 5.0.2 van XCode is de beste manier om dit te bereiken waarschijnlijk door het toe te voegen aan het deelvenster “Zoekpaden” van het doel. Het lokaliseren hiervan was (voor mij) ongelooflijkniet intuïtief. Hier is hoe ik erbij kwam, voor degenen die net zo in de war zijn als ik:

Klik in de linkerkolom op het pictogram Project Navigator (ziet eruit als een map). Klik vervolgens op het projectitem. Dit zou een aantal instellingen in het hoofdvenster moeten tonen. Klik bovenaan dit paneel op ‘Instellingen bouwen’. Dit toont een aantal items… waaronder een met de naam Zoekpaden… terwijl, totdat ik erachter kwam dat de naam van het project bovenaan dit paneel een pull-down was; kies het doeluit deze pull-down, en je zou nu moeten kunnen dubbelklikken op “Header Search Paths” en voer de benodigde bewerking uit.

O, het plezier van gekke GUI’s.


Antwoord 2, autoriteit 91%

Ik heb het bedacht.

Het enige wat u hoeft te doen is de vlag -I toevoegen aan uw build-instelling onder “Andere C-vlaggen”

Zoek in de build-instelling van uw doel naar “Andere C-vlaggen” en voeg -I/path-to-include/

toe

Hier is een screenshot:


Antwoord 3, autoriteit 28%

Probeer dit:

1 – selecteer uw projectbestand in het linker Xcode-venster
2 – zorg ervoor dat uw project is geselecteerd in het middelste Xcode-venster
3 – selecteer “Build Settings” bovenaan het middelste Xcode-paneel
4 – zorg ervoor dat “Alle” & “Gecombineerd” zijn geselecteerd net onder “Build-instellingen”
5 – typ header in het zoekveld net onder ‘Build Settings’

U zou de zoekpadvelden in het middelste deelvenster moeten zien klaar om te bewerken.


Antwoord 4, autoriteit 21%

Ik heb dit opgelost in Xcode 5.0.1 met behulp van het project Build Settings (zoals John en Ian hierboven opmerkten, maar ik kan geen commentaar geven vanwege <50 rep).

Nieuwe informatie:

Bij het toevoegen van include aan GebruikersHeader Search Paths, moest ik ook Always Search User Paths veranderen in Ja.

Als u include toevoegt aan (niet-gebruiker) zoekpaden voor kopteksten, is altijd zoeken naar gebruikerspaden niet vereist.


Antwoord 5, autoriteit 7%

Hoewel dit werkt, is het waarschijnlijk beter om het in plaats daarvan onder het tabblad ‘Zoekpaden’ te plaatsen.


Antwoord 6, autoriteit 5%

U kunt ofwel “Other C Flags” gebruiken of “HEADER_SEARCH_PATHS” gebruiken om de include-paden op te geven, om te zoeken naar de header voor uw uitvoerbare bestand.


Antwoord 7

In 2021, Xcode v. 12.4, lijkt de oplossing te zijn:

Project->Targets->General->”Scan alle bronbestanden voor inclusief”-> ingesteld op “Ja”

Dit werkte voor mij.

Dit kan echter een backfire hebben als u meerdere versies van een specifiek .h-bestand heeft, waarschijnlijk geen goede praktijk, maar het is mogelijk als u veel submappen hebt met hun eigen mini-projecten en op dezelfde manier genoemd.

Other episodes