ich make verwenden möchte einen modularen Aufbau in Kombination zu bekommen mit continuous integration, automatischen Unit-Tests und Multi-Plattform baut. Ähnliche Konfigurationen sind in Java und .NET üblich, aber es fällt mir schwer, dies für make und C/C++ zusammenzustellen. Wie kann es erreicht werden?perfekte Make-Datei
Meine Anforderungen:
- schnell zu bauen; nichtrekursiven make (Stapelüberlauf Frage What is your experience with non-recursive make?)
- modulares System (das heißt, ein minimalen Abhängigkeiten, Make-Datei im Unterverzeichnis mit Komponenten)
- mehr Plattformen (typischerweise PC für Komponententests, eingebettet Ziel für Systemintegration/release)
- vollständige Abhängigkeit
- Fähigkeit Prüfung auszuführen (automatische) -Einheit Tests (Agile Engineering)
- Haken in kontinuierliche Integrationssystem
- leicht zu verwenden
Ich habe mit non-rec make gestartet. Ich finde es immer noch großartig, um anzufangen.
Einschränkungen bisher:
- keine Integration von Unit-Tests
- Inkompatibilität von Windows-basierten ARM-Compiler mit Cygwin Pfaden
- Unverträglichkeit von Make-Datei mit dem Windows \ Pfaden
- vorwärts Abhängigkeiten
Meine Struktur wie folgt aussieht:
project_root /algorithm /src /algo1.c /algo2.c /unit_test /algo1_test.c /algo2_test.c /out algo1_test.exe algo1_test.xml algo2_test.exe algo2_test.xml headers.h /embunit /harnass makefile Rules.top
Ich möchte die Dinge einfach zu halten; hier hängen die Komponententests (algo1_test.exe) sowohl von der "Algorithmus" -Komponente (ok) als auch von dem Komponententest-Framework ab (die zum Zeitpunkt des Aufbaus bekannt sein können oder nicht). Das Verschieben der Erstellungsregeln in die oberste Ebene ist für mich jedoch nicht interessant, da dies lokales Wissen über Komponenten im gesamten System verteilen würde.
Was die Cygwin Wege: ich darauf, die Build mit relativen Pfaden arbeite. Dies löst das /cygdrive/c
Problem (wie Compiler im Allgemeinen/Pfaden behandeln), ohne C: (was Abneigungen machen). Irgendwelche anderen Ideen?
Beachten Sie, dass Sie '/' als Pfadtrennzeichen in Windows in der Regel gut verwenden können. Fast jede API-Funktion, die Pfade transparent verwendet, übersetzt sie trotzdem in '\'. – Joey
In der Tat. Es ist jedoch der Laufwerksbuchstabe, der Probleme verursacht. Make behandelt nicht das: well (wie es ein Ziel definiert). Und das/cygdrive/c/wird von Windows-Anwendungen nicht erkannt. Wenn ich/cygdrive/c nach c:/übersetze, wird die von einem Compiler generierte Abhängigkeitsdatei vom Makefile nicht erkannt. – Adriaan