Hilfe: C++ Builder 2007 Projekt ohne IDE compilen/linken??
-
Hallo,
Da ich noch ein newbie in Sachen C++ Builder bin, habe ich mal folgende Frage.
Ich arbeite zur Zeit mit dem C++ Builder 2007, und bin dabei, ein kleines Windows Projekt (momentan 4 kleine *.cpp Dateien) zu erstellen. Das klappt soweit auch ganz gut.Da ich auch während meiner Arbeit ab und an Zeit hätte an diesem Projekt weiter zu arbeiten - auf der Arbeit aber leider kein C++ Builder habe bzw. auch nicht installieren kann - habe ich mir überlegt die ganze Sache auf einem USB Stick zu installieren. Da die IDE C++ Builder 2007 nicht auf einem Stick installierbar ist habe ich versucht mit dem Editor PSPad und dem freeware compiler BCC55 von Borland und den kompletten Libs/Includes vom C++ Builder 2007 das Projekt zu compilen.
Compilen hat funktioniert, aber der Linker wirft ne Fehlermeldung (EXTCTRLS.OBJ nicht gefunden) heraus.
Ich denke mal, das sich die kompletten Anweisungen für Compiler und Linker in der *.cbproj Datei befinden. Gibt es eine Möglichkeit, diese in eine Art „makefile“ zu konvertieren, sodass man z.B. mit „make“ das Projekt compilen könnte?Bzw. ist mein Vorhaben (das Projekt ohne die IDE zu compilen und zu linken) überhaupt möglich?
Danke schonmal
-
Grundsätzlich ist es vielleicht sinnvoller, nicht den BCC 5.5 zu verwenden, sondern den Kommandozeilencompiler des C++Builder 2007. Meines Wissens räumen die Lizenzbedingungen auch explizit ein, den Kommandozeilencompiler für (automatisierte) Builds auf einer anderen Maschine vom Produkt selbst zu trennen. Dafür kopierst du einfach die Verzeichnisse Include und Lib aus dem Installationsverzeichnis und übernimmst die Äquivalente der Dateien, die du im Bin-Unterverzeichnis des BCC 5.5 vorfindest, aus dem Bin-Unterverzeichnis des C++Builder 2007.
Wenn der PC, an dem du arbeitest, das .NET-Framework 2.0 installiert hat, kannst du das Projekt theoretisch mittels MSBuild erstellen (über die Kommandozeile mit msbuild.exe myproject.cbproj) - vorausgesetzt, MSBuild ist richtig konfiguriert. Wie nun dies allerdings zu bewerkstelligen ist, ohne C++Builder 2007 zu installieren, entzieht sich meiner Kenntnis; ich denke, darüber läßt sich auf den Seiten Microsofts mehr herausfinden.
Interessanter ist sicherlich die Möglichkeit, auf MSBuild zu verzichten (hier ist beschrieben, wie das für BDS 5.0 aka Delphi 2007 aka C++Builder 2007 aka RAD Studio 2007 geht) sowie das bdsproj2mak-Tool, das hier für registrierte BDS 2006-Benutzer erhältlich ist. Mithilfe dieses Kommandozeilentools sollte es problemlos möglich sein, ein Makefile aus einer bdsproj-Datei zu generieren. Wenn du also ebenfalls über eine Lizenz von BDS 2006 verfügst, ist das die Lösung.
Ferner hat Andreas Hausladen bei irgendeiner Gelegenheit erwähnt, daß er zwecks Behebung des einen oder anderen Fehlers und in Anbetracht der Tatsache, daß sich in .NET-Programme wie MSBuild nicht einfach eingreifen läßt, fast den kompletten MSBuild-Mechanismus in nativem Code nachgebaut hat. Soweit ich mich erinnere, erachtete er sein Produkt für noch nicht marktreif, aber vielleicht ergibt sich hier in naher Zukunft eine weitere Möglichkeit.Falls keiner dieser Wege für dich gangbar ist, bleibt dir immer noch die Option, anhand der Projektdatei, die du einfach in einem Editor öffnest und die, da in XML gehalten, gut lesbar sein sollte, entweder das Makefile von Hand zu erstellen oder aber ein Batch-Skript zu schreiben, das Compiler und Linker mit den entsprechenden Parametern aufruft. Im C++Builder 2006 ließ sich die komplette Kommandozeile, mit der Compiler und Linker aufzurufen waren, überdies in den Projektoptionen einsehen, vielleicht geht das auch in C++Builder 2007.
-
Erstmal vielen Dank für die ausführliche Antwort

Ich habe mitlerweile auch den compiler/linker etc. vom bin/ Verzeichniss des Builder 2007 auf den Stick kopiert und es damit getestet. Leider das gleiche Ergebniss (EXTCTRLS.OBJ not found!).
Nach ein bisschen google'n bin ich auch auf die Methode mit MSBuild gestossen. Habe ebenfalls alle benötigten Dateien auf den Stick kopiert und versucht das Programm mit "msbuild /t:Clean /p:Configuration=Debug" zu übersetzen. Leider kam auch damit eine Fehlermeldung (Borland.Cpp.Targets(576,3)) errorMSB4036 usw...
Ich werde mir nun mal deine weiteren Tips ansehen und hoffe das es damit dann geht

Vielen Dank für die Bemühungen!
-
EXTCTRL.OBJ hört sich für mich fast nach WinAPI an.
Also schau, das du die libs vom C++ Builder 2007 am besten komplett mit kopierst.
BTW: schonmal nach der DAtei auf deiner Platte gesucht ?greets,
Branleb
-
branleb schrieb:
EXTCTRL.OBJ hört sich für mich fast nach WinAPI an.
Also schau, das du die libs vom C++ Builder 2007 am besten komplett mit kopierst.
BTW: schonmal nach der DAtei auf deiner Platte gesucht ?Habe die kompletten Libs vom Builder kopiert. Die EXTCTRLS.OBJ befindet sich definitiv nicht auf der Platte bzw. auch nicht auf meinem Stick

Das ist ja das seltsame. Finde nur EXTCTRLS.DCU und EXTCTRLS.HPP.
Ich vermute mal, das diese Datei auch irgendwie erzeugt werden muss bzw. beim C++ Builder 2007 während des compilens des Projekts erzeugt wird.
Irgendwie ist das alles sehr sehr kompliziert
-
eine DCU ist afaik das Deplhi gegenstück zu OBJ -> vll kreiegst du die "konvertiert" ?
Ansonsten fällt mirauch nicht mehr ein...greets,
Branleb
-
Eigentlich sollte das Konvertieren nicht nötig sein, da der Linker auch gegen DCUs linken kann. Wie lautet denn die Kommandozeile, die du zum Aufruf des Linkers benutzt?
-
audacia schrieb:
Eigentlich sollte das Konvertieren nicht nötig sein, da der Linker auch gegen DCUs linken kann. Wie lautet denn die Kommandozeile, die du zum Aufruf des Linkers benutzt?
Hmm.. der Linker wurde bis dato immer automatisch aufgerufen.
Ich habe mir eine kleine batch-Datei mit folgender Befehlszeile angelegt.
"bcc32 -tW tankwagen.cpp twg.cpp userdata.cpp userlogin.cpp verladung.cpp"
Anschliessend wird der Linker automatisch gestartet. Die Pfade zu den entsprechenden Libs/Includes habe ich in den Dateien bcc32.cfg und ilink32.cfg eingetragen.
-
Dann probierm mal den bcc die Obtion für die Libs zu übegebeb.
Also was in der Richtung:
bcc -lextctrl.dcu
und schau die mal bcc -h angreets