Pfadabhängigkeiten in einem Codeprojekt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Pfadabhängigkeiten in einem Codeprojekt

    Hallo,

    ich arbeite gerade an einem etwas größeren Codeprjekt und ich wollte mal fragen wie ich die Betriebssystemabhängigkeiten irgendwie auf eine gute Weise fixen könnte. Also was meine ich überhaupt: in meinem Projekt habe ich Pfadabhängigkeiten und ein paar cvars definiert, diese sehen ungefähr so aus:

    Quellcode

    1. [...]
    2. { &Directory, "Pfad/zu/Directory"}
    3. [...]

    Also das sieht zunächst mal komisch aus da es aus dem Zusammenhang nicht so gut erkennbar ist, aber es handelt sich hierbei um ein Element eines Struktur Arrays. Darauf will ich aber nicht hinaus. Was ich machen will ist mein Projekt automatisch auf Linux und auf Windows kompilieren zu lassen, mit den richtigen Pfadangaben. Wenn es auf Windows kompiliert wird, möchte ich dass der Compiler das erkennt und ein #define Windows oder so setzt. Bei Linux möchte ich dasselbe. Dann möchte ich meine Pfade danach ausrichten bzw. in diesem Strukturelement definieren, und zwar Betriebssystemabhängig, unter Windows möchte ich den Pfad mit Forwardslash, bei Linux mit Backslash. Wie schaffe ich es also dass dann in etwa sowas da steht:

    [...]
    #ifdef Windows
    { &Directory, "Pfad/zu/WindowsDirectory"}
    #ifdef Linux
    { &Directory, "Pfad\zu\LinuxDirectory"}
    [...][/code]

    Ich hoffe jemand kann helfen.

    Gruß

    -z
  • Ich hab in meinem Projekt folgendes verwendet, was auch gut geklappt hat.

    Quellcode

    1. #if defined(_WIN32) || defined(__WIN32__)
    2. ...
    3. #elif defined(linux) || defined(__linux)
    4. ..
    5. #elif defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh)
    6. ...
    7. #else
    8. ...
    9. #endif


    Aufgrund dessen das die vordefinierten Macros vom Compilier abhängig sind gibt es mittlerweile viele unterschiedliche davon. Die obigen sollten jedoch die gängisten sein.

    Mfg Rushh0ur
  • Rushh0ur schrieb:

    Ich hab in meinem Projekt folgendes verwendet, was auch gut geklappt hat.

    Quellcode

    1. #if defined(_WIN32) || defined(__WIN32__)
    2. ...
    3. #elif defined(linux) || defined(__linux)
    4. ..
    5. #elif defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh)
    6. ...
    7. #else
    8. ...
    9. #endif


    Aufgrund dessen das die vordefinierten Macros vom Compilier abhängig sind gibt es mittlerweile viele unterschiedliche davon. Die obigen sollten jedoch die gängisten sein.

    Mfg Rushh0ur


    Sehr gut, werde es heute Abend gleichmal ausprobiern. Das heißt also das Flag _WIN32 und all die anderen werden automatisch gesetzt und man kann davon ausgehen dass sie noch vor den ersten Kompilierungen zur Verfügung stehen ? Ich kann also immer und jederzeit Fragen in welchem OS ich bin ?

    Gruß

    -z
  • user_z0 schrieb:


    Sehr gut, werde es heute Abend gleichmal ausprobiern. Das heißt also das Flag _WIN32 und all die anderen werden automatisch gesetzt und man kann davon ausgehen dass sie noch vor den ersten Kompilierungen zur Verfügung stehen ? Ich kann also immer und jederzeit Fragen in welchem OS ich bin ?

    Ja das geht definitiv, man muss halt nur wissen auf welche Konstanten man prüfen kann/muss, was wie ja schon geschrieben wurde extrem Compiler abhängig ist.

    Für den gcc kann man übrigens leicht rausfinden welche Konstanten auf dem aktuellen System vorhanden sind:
    cpp -dM foo.h
    (wobei foo.h einfach nur ne leere datei ist, es muss nur irgendwas angegeben sein)
    da spuckt er dann ne Menge deklarierter Konstanten aus. Unter Windows 7 mit MinGW sind das bei mir unter anderem __WIN32, WIN32, __WIN32__, __WINNT__, WINNT etc.