Frage

Edit] ==>Um zu verdeutlichen, hat Planet Earth in den Umgebungen, in denen mehrere Ziele in demselben Verzeichnis eingesetzt werden, für eine Konvention entschieden, um anzuhängen. "d" oder "_d" oder "_debug" zum "DEBUG"Version einer Bibliothek oder ausführbare Datei). Eine solche Konvention kann als" allgegenwärtig "und" verstanden "angesehen werden, obwohl (natürlich) nicht jeder dies tut.

In ähnlicher Weise besteht die gemeinsame Übereinkommen, um die Mehrdeutigkeit zwischen "gemeinsam genutzten" und "statischen" Versionen einer Bibliothek zu lösen, etwas darin, etwas anzuhängen, um zwischen statischen und schützen (wie "zu unterscheiden (wie".myfile.lib"Für Shared-Import-Lib-on-Windows und"myfile_s.lib"Für statische Import-Lib-on-Windows). Während POSIX diese Mehrdeutigkeit auf der Basis der Dateierweiterung nicht hat, denken Sie daran, dass die Dateierweiterung nicht in der" Linkzeile "verwendet wird. Daher ist es ähnlich nützlich, explizit in der Lage zu können, explizit zu sein Geben Sie die "statische" oder "gemeinsame" Version einer Bibliothek an.

Für den Zweck dieser Frage beide "debug/release" und "static/shared"werden befördert zu "Allgegenwärtige Konvention zum Dekorieren des Dateinamen -Roots".

FRAGE: Wird eine andere Bereitstellungskonfiguration auf diese Ebene der "allgegenwärtigen Konvention" "beworben", so dass sie im Dateiziel -Stammnamen explizit werden würde?

Meine aktuelle Vermutung ist "nein". Damit die Antwort auf "Ja" ist, müsste es Folgendes erfordern: Mehr als eine Konfiguration für das gegebene Ziel soll "verwendet" werden (und somit in einem gemeinsamen Verzeichnis eingesetzt werden, was die angenommene Grundlage für die Frage ist).

In der Vergangenheit haben wir mit "Web-Plug-In" -Fero- und -webkennzahlen zusammengestellt, was diese Namensdekoration auf ähnliche Weise erforderte, aber wir erstellen diese Ziele nicht mehr (daher werde ich das als Beispiel nicht behaupten). In ähnlicher Weise kompilieren wir manchmal mit Support mit mehreren Byte-Charakteren und ohne Multi-Byte-Charakter, aber ich hasse das, also werde ich das auch nicht behaupten.

Originalfrage

War Aufbau von Konventionen zur Benennung von Bibliotheken/Politik, über Sprachen und Plattformen hinweg angewendet werden (z. B. unterstützen wir Hybridprodukte anhand mehrerer Sprachen auf verschiedenen Plattformen, einschließlich C/C ++, C#, Java). Ein besonderes Ziel ist es, sicherzustellen, dass wir Ziele/Ressourcen für die mobile Entwicklung (die für uns neu ist) zusätzlich zu unseren herkömmlichen Desktop- (und eingebetteten) Anwendungen umgehen.

Na sicher, eines Die Möglichkeit besteht darin, unterschiedliche Pfade für Ziele aus verschiedenen Build -Konfigurationen zu haben. Für die Zwecke dieser Frage wird die Entscheidung getroffen, dass alle Ziele Co-Lode in ein einzelnes Verzeichnis haben und den Namen Bibliothek/Ressource/ausführbarer Name "dekorieren", um Kollisionen auf der Grundlage der Build-Konfiguration (z. B. "Debug" v zu vermeiden. "Release", "static lib" v. "Shared/DLL" usw.)

Die aktuelle Entscheidung ähnelt anderen im Web, wo wir Token anhängen, um Kollisionen zu benennen:

  MyName.lib           (release build, import for shared/dll)
  MyName_s.lib         (release build, static lib)

  MyName_d.lib         (debug build, import for shared/DLL)
  MyName_ud.lib        (Unicode/wide-char, debug, import for shared/DLL)
  MyName_usd.lib       (Unicode/wide-char, static lib, debug)

(Die oben genannten Windows -Beispiele sind jedoch in ähnlicher Weise für unsere POSIX -Systeme gelten.)

Diese basieren auf:

  d     (release or debug)
  u     (ASCII or Unicode/wide-char)
  s     (shared/DLL or static-lib)

FRAGE: Wir haben keine Legacy-Anwendungen, die mit Single-Threaden zusammengestellt werden müssen, und mein Verständnis ist, dass (im Gegensatz zu Microsoft) POSIX-Systemen ohne Probleme mit Einzel- und Multi-Thread-Zielen in eine einzelne Anwendung verknüpfen können. Angesichts des heutigen Vorstoßes in Richtung Multi-Core und Multi-Threaded, Gibt es ein Bedürfnis in einem Großer Unternehmen Folgende festlegen, um "Single-" versus "multi-threadd" -Kompilzziele zu identifizieren?

  t       (single-threaded or multi-threaded)  *(??needed??)*

... und haben wir eine andere Zielkollision vermisst, wie mit STL (auf C ++) kompilieren?

Abgesehen davon hat Microsoft Bibliotheksnamenkonventionen bei:http://msdn.microsoft.com/en-us/library/aa270400(v=vs.60).aspx und ihre DLL -Namenskonventionen bei: http://msdn.microsoft.com/en-us/library/aa270964(v=vs.60).aspx

Eine ähnliche Frage zu einem Jahr vor einem Jahr, in dem nicht über Threading gesprochen wurde und sich nicht auf die Microsoft -Konventionen bezogen, finden Sie unter: Was ist eine ordnungsgemäße Namenskonvention für MSVC -DLLs, statische Bibliotheken und Importbibliotheken

War es hilfreich?

Lösung

Sie verwenden einen alten Compiler. Es besteht keine Notwendigkeit, einen solchen Standard in einem Unternehmen festzulegen, der Anbieter hat dies bereits getan. Microsoft hat in den letzten 13 Jahren keine Einzelversion der CRT mehr ausgeliefert. In ähnlicher Weise ist Windows seit 17 Jahren ein Unicode -Betriebssystem. Es macht keinen Sinn, heutzutage noch Unicode Agnostic Code zu schreiben.

Aber ja, die gemeinsame Konvention besteht darin, ein "D" für den Debug -Aufbau einer Bibliothek anzuhängen. Und eine DLL -Version einer Bibliothek einen völlig anderen Namen zu geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top