make: Verschiedene Includes behandeln



  • Hallo,

    ich habe drei cpp-Dateien. (Linux.cpp, Windows.cpp, Test.cpp)
    In der Test.cpp habe ich die Main stehen. Nun möchte ich entweder die Linux.cpp oder die Windows.cpp includen, je nach Betriebssystem.
    D.h. einmal make Linux und make Windows
    Wie muss dann dafür aber die make aussehen, so dass ich nicht jedesmal per Hand die include-Zeilde in der Test.cpp umändern muss?

    Vielen Dank!



  • Du kannst mit -DFOOBAR das Symbol FOOBAR definieren und dann einfach mit #ifdefs inkludieren.
    Dann eben ein Make-Target für Windows und eines für GNU/Linux...



  • Ähh, sorry, aber das raff ich nicht...
    Der zweite Teil ist klar, aber der erste??

    Könntest du so nett sein und mir vielleicht ein kleines Beispiel geben? Ich habe mit make-Files nicht wirklich viel Erfahrung.



  • // test.c
    #include <stdio.h>
    
    int main(void)
    {
        printf("Hello world\n");
    #ifdef FOOBAR
        printf("foobar!\n");
    #endif
        return 0;
    }
    
    ~ % vi test.c
    ~ % gcc -o test  test.c 
    ~ % ./test 
    Hello world
    ~ % gcc -DFOOBAR -o test test.c 
    ~ % ./test 
    Hello world
    foobar!
    ~ %
    


  • #ifdef braucht man dafür auch nicht.

    Statt windows.h, linux.h usw. gibst du dem header einen gemeinsamen Namen, zb. os.h, und den inkludierst du überall.

    Dann machst du Unterordner windows, linux und tust dort die jeweiligen os.h-header rein.

    Im Makefile dann mit gcc -I$(TARGET) kompilieren und TARGET entsprechend dem Verzeichnis wo der Header drinliegt setzen.

    Auf die Weise kannst du auch gleich die cpp-Dateien mitkompilieren, einfach mit g++ $(TARGET)/bla.cpp


Anmelden zum Antworten