#define oder in den Settings festlegen?
-
Hallo Forum,
ich möchte einen externen Sourcecode kompilieren. In der Anleitung steht das ich ein paar Defines festlegen muß.
Wenn ich in meinem main() Modul als erstes (vor allen #includes) ein "#define abc" schreibe tut der Kompiler so als wenn ich abc gar nicht definiert hätte. Gebe ich aber unter Project->Settings->C++->PreprocessorDefinitions das Define "abc" an verschwindet der Fehler. Warum sind beide Definitionspositionen nicht gleichwertig?
Vielen Dank
Mike
-
Wo hast Du den #define abc angegeben?
Ich vermute vor der #include <stdafx.h> Zeile!Wenn das so ist, hier die Erklärung:
Du musst wissen, dass durch die Funktion "Precompiled" Header alles bis zu einem bestimmten Punkt (header) vorkompiliert. Im Klartext heißt das, alles was vor #include <stdafx.h> stehtwird ignoriert, als wenn es nicht geschrieben wäre.Wenn dem nicht so ist, dann hast Du definition evtl. nicht früh genug gemacht,dass Dein Code diesen define berücksichtigt.
-
Mike abc schrieb:
Wenn ich in meinem main() ...
ich vermute du hast das in der *.cpp geschrieben wo auch main angegeben ist - aber das define wird auch in einer anderen cpp datei gebraucht welches diese main cpp datei gar nicht kennt
entweder per settings definieren wie du selber schon probiert hast - oder an einer stelle definieren wo es fuer alle cpp {und h} dateien zur verfuegung steht - wie zb in der stdafx.h
-
Die vorkompilierten Header habe ich ausgeschaltet. Wenn ich den Eintrag "#include "stdafx.h" bei der externen .c Datei einfüge erhalte ich die Fehlermeldung:
> 'Debug/ParserTest2.pch' is not a precompiled header file created with this compiler
Jetzt habe ich sie global ausgeschaltet und die "#include "stdafx.h" auskommentiert.
Der Define steht somit in der ersten Zeile des main Modules. Trotzdem scheinen die Definitionen nicht gleichwertig zu sein.@Mr Evil: Ich versuche eine Demo zum Laufen zu bringen. Ich habe die dortige main Routine in main_old umbenannt und mit "#include "Demo.c"" in mein aktuelles Projekt eingebunden.
-
einfach so das atdafx.h einfuegen kannste vergessen - wie gesagt das ist ein precompiled header, und dieser ist ja nicht erstellt
hat dein normales projekt eine stdafx ? trags da mal ein
-
Die PreCompHeader habe ich ja abgeschaltet.
Mein Projekt sieht so aus:
//#include "stdafx.h" #define ABC #include "Demo.c" int main(int argc, char* argv[]) { printf("Hello World!\n"); main_old(argc, (char **)&argv); return 0; }Wenn ich es so kompiliere meckert er "macro redefinition", weil ich ABC schon in den Settings definiert habe. Nehme ich es aus den Settings raus ist ABC in Demo.c nicht definiert.
-
Man inkludiert keine Quellcodedateien.
-
CodeFinder schrieb:
Man inkludiert keine Quellcodedateien.
Man kann aber...

-
Martin Richter schrieb:
CodeFinder schrieb:
Man inkludiert keine Quellcodedateien.
Man kann aber...

Jo, machste das auch ^^ ?
-
Nur so nebenbei...
Mir hat mal einer ein
#include “ExtDllState.cpp“
ungetestet aus dem Projekt gelöscht, weil er auch meinte, das macht man nicht.
Folge:
Erscheinen der DLL-Dialoge nach dem Zufallsprinzip...
Artikel dazu:
http://www.codeguru.com/cpp/w-p/dll/article.php/c107/
-
Man macht es auch nicht! Was natürlich nicht heißt, dass es nicht geht, aber das hab ich auch nicht gesagt.
-
CodeFinder schrieb:
Man inkludiert keine Quellcodedateien.
Dies ist ja nicht mein echtes Projekt, sondern nur ein Standard HelloWorld KonsolenPrj.
Bei diesem Beispiel werden gleich 2 Fehler geworfen. Einmal das ABC nicht definiert ist, einmal das ABC definiert ist.
//Inhalt des Main Moduls---------------- #define ABC #include "abc.c" int main(int argc, char* argv[]) { printf("Hello World!\n"); return 0; } //-------------------------------------- //Inhalt des abc.c Moduls--------------- #ifdef ABC #error ABC definiert #else #error Kein ABC definiert #endif //--------------------------------------Eigentlich sollte ja nur der Fehler "ABC definiert" kommen. Ich schätze mal das hat irgendwas mit der MS Kompiler Abarbeitungsreihenfolge zu tun. Denn so kommt wieder nur die Meldung das ABC definiert ist:
//Inhalt des Main Moduls---------------- #define ABC //#include "abc.c" #ifdef ABC #error ABC definiert #else #error Kein ABC definiert #endif int main(int argc, char* argv[]) { printf("Hello World!\n"); return 0; } //--------------------------------------Mike