none
Consolenprojekt für x86 compilieren RRS feed

  • Frage

  • Hallo,

    ich vermisse den Punkt für die "Target Platform" x86. Ich kann mich waage daran erinner, dass der schon mal vorhanden war. Ich hab ein ganz normals Win32 Konsolenprojekt gestarted ohne "precompiled header".

    Falls ich mich unklar ausgedrückt haben sollte, hier ein Bild:

    http://img825.imageshack.us/img825/3127/projectoptions.png

    Ich kann mich daran erinnern, dass hier 2 Auswahlmöglichkeiten vorhanden waren, x64 und 86x. Da ich für einen x86 compilieren möchte, bräuchte ich diesen wieder.

    mfg

    Mittwoch, 6. Oktober 2010 21:35

Antworten

  • Das ganze heisst nicht "x86" sondern "Win32"... und das ist schon längst in Deiner Konfiguration vorhanden!


    Jochen Kalmbach (MVP VC++)
    Donnerstag, 7. Oktober 2010 04:41
  • Win32 ist die Targetplatform (x86).
    In dem Dialog zum anlegen einer Konfiguration bekommst Du nur angezeigt, was Du noch nicht verwendest.
    Deine jetzige Konfiguration ist die x86 (Win32).
    Wenn Du diese löscht, dann bekommst Du beim Anlegen einer neuen Konfiguration neben Itanium auch wieder Win32 angeboten.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 7. Oktober 2010 06:11
    Moderator
  • Öffne mal das "pointertest.vcxproj" im Notepad und ändere das

    <ClCompile Include="TestKlasse.hpp" />

    nach

    <ClInclude Include="TestKlasse.hpp" />

    !


    Jochen Kalmbach (MVP VC++)
    • Als Antwort markiert Britneyfearz Samstag, 9. Oktober 2010 21:11
    Samstag, 9. Oktober 2010 17:36

Alle Antworten

  • Das ganze heisst nicht "x86" sondern "Win32"... und das ist schon längst in Deiner Konfiguration vorhanden!


    Jochen Kalmbach (MVP VC++)
    Donnerstag, 7. Oktober 2010 04:41
  • Win32 ist die Targetplatform (x86).
    In dem Dialog zum anlegen einer Konfiguration bekommst Du nur angezeigt, was Du noch nicht verwendest.
    Deine jetzige Konfiguration ist die x86 (Win32).
    Wenn Du diese löscht, dann bekommst Du beim Anlegen einer neuen Konfiguration neben Itanium auch wieder Win32 angeboten.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 7. Oktober 2010 06:11
    Moderator
  • danke für die schnelle Antwort. Ich war irgendwie diese Auswahlmöglichkeit gewöhnt:

    http://img192.imageshack.us/img192/5558/projectcsharp.png

    ist aber nur in c# vorhanden (-:

    Da hab ich wohl was verwechselt.

    Ich hätte noch eine kleine Nebenfrage:

    Es kommt immer wieder vor, dass manche Änderungen in einem include nicht mitcompiliert werden, wenn ich F5 (Debug) benutze. Erst wenn ich "Clean Solution" wähle werden die Änderungen in den Includes mitcompiliert. Ich habe auch schon die Option "Enable Minimal Rebuild" auf "No" gestetzt, allerdings passiert immer noch dasselbe, und dass ist doch recht nervig, wenn man das Programm häufig ändert und erst süäter merkt, dass die Änderungen nicht mitcompiliert wurden. Was mache ich da falsch?

     

    Donnerstag, 7. Oktober 2010 07:24
  • Bist Du sicher, dass die Uhrzeit auf Deinem Rechner stimmt?
    Der Build erkennt die Änderungen anhand der Uhrzeit... wenn die include-Dateien älter als die letzten OBJ-Dateien sind, wird nicht neu gebuilded...


    Jochen Kalmbach (MVP VC++)
    Donnerstag, 7. Oktober 2010 07:39
  • Bist Du sicher, dass die Header, die in Deine Sourcedateien benutzt werden auch in das Projekt eingefügt wurden?
    D.h. die Dateien müssen auch Bestandteil Deines Solution-Baumes sein. Sind solche Header nicht in der Solution, kann man leicht solche Effekte erhalten.

    Wichtig: Dateien wie die resource.h sind von diesem Verhalten ausgenommen! Solche Ausnahmen werden durch eine Code-Zeile

    //{{NO_DEPENDENCIES}}

    ausgelöst.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 7. Oktober 2010 08:11
    Moderator
  • Ja, Uhrzeit ist richtig. und ja, die includes sind im Project eingefügt. Allerdings sind die #includes cpp files und nicht header. Macht das einen Unterschied?

     

     

     

    Donnerstag, 7. Oktober 2010 14:03
  • Macht das einen
    Unterschied?

    Wie denn das?
    Dann werden die CPP Dateien ja separat noch mal kompiliert und inlcuded.

    Das macht doch keien Sinn.

    Ich denke, dass kan ein Problem sein...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 7. Oktober 2010 14:10
    Moderator
  • Macht das einen
    Unterschied?

    Wie denn das?
    Dann werden die CPP Dateien ja separat noch mal kompiliert und inlcuded.

    Das macht doch keien Sinn.

    Ich denke, dass kan ein Problem sein...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de


    Yep, habs mal kurz getestet:

    test.cpp:

    #include <iostream>
    #include "TestKlasse.cpp"
    using namespace std;
    
    void main()
    {
    	Klasse k;
    	cout << k.testvalue;
    	char c;
    	cin >> c;
    }
    

    TestKlasse.cpp

    class Klasse
    {
    public:
    	class Klasse()
    	{
    		testvalue = 5;
    	}
    	int testvalue;
    };
    

    Wenn ich das ganze jetzt einmal kompilier und dann in Klasse den testvalue auf einen anderen Wert setze, dann wird TestKlasse.cpp nicht neu compiliert und ich krieg den Wert von vorher.

    Gibt's eventuell noch irgendwo eine Einstellung, damit ich den Compiler zwingen kann, dass er alles neu compiliert? Enable minimal Build ist schon auf No gesetzt.

    Donnerstag, 7. Oktober 2010 14:20
  • Das macht doc irgendwie gar keinen Sinn... ändere die Dateierweiterung nach "inc" und verwende nicht "cpp"!


    Jochen Kalmbach (MVP VC++)
    Donnerstag, 7. Oktober 2010 17:11
  • Das macht doc irgendwie gar keinen Sinn... ändere die Dateierweiterung nach "inc" und verwende nicht "cpp"!


    Jochen Kalmbach (MVP VC++)

    Warum macht das keinen Sinn? Es ist korrekter c++ Code und ich muss nicht für jede mini Testklasse einen header schreiben, was schon ein wenig zeitaufwendig werden kann, wenn man mehrere verschiedene Sachen testen möchte.  Auch wenn ich's inc nenne wird's nicht neu compiliert.
    Donnerstag, 7. Oktober 2010 20:34
  • 1. Muss man keinen #include machen um Testklassen zu testen. Du kannst alles in ein Modul (.cpp schreiben) ohne ene #include.
    2. Wenn man Klassen in mehreren Modulen benötigt, dann muss ein include in einem Modul erfolgen, dass nicht extern kompiliert wird.
    Wenn Du eine CPP Datei einfügst in ein Projekt, dann wird diese Datei separat kompiliert.
    3. Wenn sich eine #include Datei ändert (.h .inc etc.) dann wird auch jedes Modul neu kompiliert in dem diese #included wird.
    4. Es macht absolut überhaupt Null Sinn, den Code den Du da hast (eine reine Deklaration) in ein CPP Modul zu sezen. Hier wird 0 Code erzeugt.
    5. Klassen die reinen inline Code enthalten müssen entsprechend in eine .inc. hpp. .h Datei, oder eine Datei ohne Extension (was den std-Dateien vorbehalten ist).


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 8. Oktober 2010 07:00
    Moderator
  • Die Testklasse ist ja eine reine inline Klasse (hier nur mit Konstruktor wegen der Einfachheit, aber selbiges Problem existiert auch wenn ich mehrere inline Funktionen hab), ob ich diese nun hpp, inc oder h nenne ändert nichts(ich hab alle 3 Dateiendungen ausprobiert und auch den File Type entsprechend in den Einstellungen geändert).  Sie wird trotzdem nicht mitcompiliert, wenn ich in einer "inline" Methode etwas ändere.
    Freitag, 8. Oktober 2010 17:24
  • Die Datei wird auch nicht kompiliert. Es müssten die Dateien kompiliert werden, die die Datei includen.
    Wenn das nicht der Fall ist, schick mit mal das Testprojekt, oder stell es irgendwo zum Download bereit.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 8. Oktober 2010 19:51
    Moderator
  • Habs mal hier hochgeladen: http://rapidshare.com/files/423986946/compilertest.zip

    Wenn ich in test.cpp etwas ändere, dann wird alles neu kompiliert. Wenn ich in TestKlasse.hpp was ändere, dann wird nichts neu kompiliert, wenn ich das Projekt schon einmal compiliert habe. Das letztere ist mein Problem.

    Samstag, 9. Oktober 2010 08:07
  • Deine Einstellungen für "Precompiled-Heraders" sind falsch...
    Stelle diese um:
    Project|Properties|Configuration Properties|C/C++|Precompiled Headers
    Precopiled Header: Not Using Precompiled Headers

    Und dann würde ich Dir noch empfehlen die "TestKlasse.hpp" nicht unter "SourceFiles", sondern unter "Header Files" einzusortieren.


    Jochen Kalmbach (MVP VC++)
    Samstag, 9. Oktober 2010 08:18
  • Danke, hab beides geändert, allerdings ändert das grundsätzlich nichts an meinem Problem, da die TestKlasse.hpp trotzdem bei Änderungen nicht neu kompiliert wird.

    Samstag, 9. Oktober 2010 08:39
  • Man merke: die TestKlasse.hpp wir sowieso nie compiliert, da nur die c/cpp-Dateien kopmiliert werden.
    Und nach den Änderungen auf "No precompiled header" wirkt sich bei mir eine Änderung in der hpp-Datei beim nächsten starten sofort auf die cpp-Datei aus und es wird der richtige Wert angezeigt!

    Kann es also nicht mehr nachvollziehen, was Du hier beschreibst! Zumindest nicht, nach der von mir vergeschlagenen Änderungen am Projekt!


    Jochen Kalmbach (MVP VC++)
    Samstag, 9. Oktober 2010 08:59
  • Ok, ich hab's hier mit den Änderungen nochmal hochgeladen: http://rapidshare.com/files/424026968/compilertest2.zip

    Alle Änderungen beziehen sich auf TestKlasse::testvalue. Die ich manuel von Hand im Quellcode auf verschiedene Werte setze:

    ich setze testvalue auf 5.

    Drücke F5 und bekomme die Ausgabe 5 in der Kommandozeile. (test.cpp wurde kompiliert).

    Dann setze ich testvalue auf 7 und drücke F5. In der Kommandozeile bekomme ich den Wert 5 als Ausgabe. (nichts wurde neu compiliert)

    Passiert bei mir auch noch nach den vorgeschlagenen Änderungen.

    Samstag, 9. Oktober 2010 13:16
  • Öffne mal das "pointertest.vcxproj" im Notepad und ändere das

    <ClCompile Include="TestKlasse.hpp" />

    nach

    <ClInclude Include="TestKlasse.hpp" />

    !


    Jochen Kalmbach (MVP VC++)
    • Als Antwort markiert Britneyfearz Samstag, 9. Oktober 2010 21:11
    Samstag, 9. Oktober 2010 17:36
  • Funktioniert 1a. Tausend Dank!
    Samstag, 9. Oktober 2010 21:11