Documentation of objc/objc++ dialects in GCC von Ihrem version of gcc/gobjc nicht bestimmte Option zur Auswahl der Dialekt-Variante.
Verwenden Sie einfach Standard-Dateierweiterung „.mm“ oder „.M“ (zusätzlich können Sie gcc
mit g++
ersetzen automatisch C hinzufügen ++ Bibliotheken in der Stufe verknüpft, beide Varianten nicht getestet):
gcc codefile.mm `gnustep-config --objc-flags` -lobjc -lgnustep-base -o codefile
g++ codefile.mm `gnustep-config --objc-flags` -lobjc -lgnustep-base -o codefile
Und ObjC++ ist "simply source code that mixes Objective-C classes and C++ classes"
Gcc-Modus basierend auf Dateierweiterung wählen wird, gibt es große Tabelle von Dateierweiterungen und entsprechenden Sprach Modi mit Objective-C für .m
und Objective-C++ für .mm
/.M
: https://github.com/gcc-mirror/gcc/blob/gcc-4_7_4-release/gcc/gcc.c#L913
static const struct compiler default_compilers[] =
{
/* Add lists of suffixes of known languages here. If those languages
were not present when we built the driver, we will hit these copies
and be given a more meaningful error than "file not used since
linking is not done". */
{".m", "#Objective-C", 0, 0, 0}, {".mi", "#Objective-C", 0, 0, 0},
{".mm", "#Objective-C++", 0, 0, 0}, {".M", "#Objective-C++", 0, 0, 0},
{".mii", "#Objective-C++", 0, 0, 0},
. . .
/* Next come the entries for C. */
{".c", "@c", 0, 0, 1},
Es gibt auch -x
Möglichkeit g++
mit erlaubt Argument der "Objective-C++" manuell wählen Sprache Dialekt (gcc -x objective-c++ ...
oder g++ -x objective-c++
): https://github.com/gcc-mirror/gcc/blob/1cb6c2eb3b8361d850be8e8270c597270a1a7967/gcc/cp/g%2B%2Bspec.c#L167
case OPT_x:
. . .
&& (strcmp (arg, "c++") == 0
|| strcmp (arg, "c++-cpp-output") == 0
|| strcmp (arg, "objective-c++") == 0
Es befindet sich auf https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html dokumentiert
-x language
Geben Sie explizit die Sprache für die folgenden Eingabedateien an (anstatt dass der Compiler basierend auf dem Dateinamen-Suffix einen Standardwert auswählt). Diese Option gilt für alle folgenden Eingabedateien bis zur nächsten Option -x. Mögliche Werte für Sprache sind:
Meine Erfahrung mit Objective-C++ zu macOS begrenzt ist, aber die Datei mit der Erweiterung .mm benannt werden muss, sonst wird es nicht funktionieren. Ich denke, das ist die richtige Antwort. –
@osgx Danke für Ihre Detailinformationen. Ich könnte Objective-C++ mit 'g ++' so kompilieren: '' g ++ Codedatei.mm 'gnustep-config --objc-flags' -lobjc -lgnustep-base -o Codedatei''. –
@ H.Al-Amri Mit clang auf macOS können Sie das '-ObjC++ 'Flag beim Kompilieren verwenden. Dies überschreibt die dateibasierte Moduserkennung. – Clearer