0

[ 编辑 ] ==> 为了澄清,在多个目标部署到同一目录的环境中,Planet Earth 已决定约定将“ d”或“ _d”或“ _debug”附加到“ DEBUG”版本(库或可执行文件的) )。这样的约定可以被认为是“普遍存在的”和“理解的”,尽管(当然)不是每个人都这样做。

类似地,为了解决库的“共享”和“静态”版本之间的歧义,一个常见的约定是附加一些东西来区分静态和共享(如“ myfile.lib”用于 shared-import-lib-on-Windows 和“ myfile_s.lib" 用于 Windows 上的静态导入库)。虽然 Posix 没有这种基于文件扩展名的歧义,但请记住,文件扩展名不用于“链接行”,因此能够显式指定库的“静态”或“共享”版本同样有用.

出于这个问题的目的,“ debug/release”和“ static/shared”都被提升为“装饰文件名根的普遍约定”

问题: 是否有任何其他部署配置被“提升”到这个级别的“普遍约定”,以便它在文件目标根名称中变得明确?

我目前的猜测是“不”。对于“是”的答案,它需要:给定目标的多个配置旨在“使用”(并因此部署到一个公共目录,这是问题的假设基础)。

过去,我们编译时带有或不带有“web 插件”功能,这同样需要名称修饰,但我们不再构建这些目标(因此我不会作为示例断言)。类似地,我们有时会在有和没有多字节字符支持的情况下进行编译,但我讨厌这样,所以我也不会断言。

[原始问题]

我们正在建立库命名约定/策略,以跨语言和平台应用(例如,我们支持在不同平台上使用多种语言的混合产品,包括 C/C++、C#、Java)。除了传统的桌面(和嵌入式)应用程序之外,一个特定的目标是确保我们处理移动开发的目标/资源(这对我们来说是新的)。

当然,一种选择是为来自不同构建配置的目标提供不同的路径。出于这个问题的目的,决定将所有目标放在一个目录中,并“装饰”库/资源/可执行文件名称以避免基于构建配置的冲突(例如,“DEBUG”v. “RELEASE”、“静态库”v.“共享/DLL”等)

当前的决定与网络上的其他决定类似,我们在其中附加令牌以避免命名冲突:

  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)

(以上是 Windows 示例,但这些策略同样适用于我们的 POSIX 系统。)

这些基于:

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

问题: 我们没有必须单线程编译的遗留应用程序,我的理解是(与 Microsoft 不同)POSIX 系统可以将单线程和多线程目标链接到单个应用程序中而不会出现问题。鉴于当今向多核和多线程的推动,大型企业是否需要建立以下内容来识别“单”与“多线程”编译目标?

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

...我们是否错过了任何其他目标冲突,例如使用和不使用 STL 进行编译(在 C++ 上)?

顺便说一句,Microsoft 的库命名约定位于:http: //msdn.microsoft.com/en-us/library/aa270400 (v=vs.60).aspx ,它们的 DLL 命名约定位于:http://msdn。 microsoft.com/en-us/library/aa270964(v=vs.60).aspx

一年前关于 SO 的一个类似问题没有谈论线程并且没有引用 Microsoft 约定,可以在以下位置找到:什么是 MSVC dll、静态库和导入库的正确命名约定

4

1 回答 1

2

您正在使用一个古老的编译器。企业不需要建立这样的标准,厂商已经做到了。在过去的 13 年里,微软一直没有发布 CRT 的单线程版本。同样,在过去的 17 年里,Windows 一直是 Unicode 操作系统。如今,仍然编写与 Unicode 无关的代码是零意义的。

但是,是的,常见的约定是为库的调试版本附加一个“d”。并给一个库的 DLL 版本一个完全不同的名称。

于 2011-06-11T14:33:24.407 回答