如果编译为静态库编译检查(Compile check if compiling as static

2019-08-04 18:56发布

如何检查在编译如果该项目正在编译为一个lib? (静态库)

是否有某种静态的断言或其他一些标志我可以检查吗?

我无法添加预处理器变量自己,因为它是将整个公司的其他项目中使用的工具。 所以我想知道如果有一些预处理标志是被默认或东西送到。

我使用Visual Studio 2010

Answer 1:

有预定义宏列表没有这样的事- http://msdn.microsoft.com/en-us/library/b0084kay%28v=vs.100%29.aspx 。

但默认情况下MSVC增加_LIB到预处理器定义列表中,如果它是一个“静态库”项目。
(也可将其添加_USRDLL的DLL)

编辑:在Visual Studio 2017年的DLL的定义是_WINDLL (从IDE中应用的“Windows动态链接库”属性表)。 该_LIB定义不再可用。

另一种解决方案是将属性表添加到项目(签入您的版本控制库)与下列预处理器定义: _$(OutputType);%(PreprocessorDefinitions)

$(OutputType)将解析为“库”的DLL和“STATICLIBRARY”为静态库,导致_library_staticlibrary分别定义(或_exe应用程序)。

%(PreprocessorDefinitions)将堆栈从先前的属性表的定义。 请确保它被包含在项目属性的!

要添加属性表,浏览查看| 其他Windows | 物业经理在Visual Studio。



Answer 2:

如果您在使用Visual Studio,我完全不看有什么毛病添加您自己的预处理器定义。 背后的理由是,你无论如何都要提供项目文件 ,那么,可以将与项目文件中合理分配。

或者,你可能意味着“如何检查文件是否被编译成库” -有没有办法(比其他编译器定义)。



Answer 3:

什么特定的组件构建作为vcxproj文件明确设置,它是已知的,之前设定的编译时间。 什么可能是棘手的是,在配置管理器中显示您的解决方案文件的设置您的解决方案配置和平台可能会对一些靠不住的项目配置和平台,是有差异的为您解决方案生成解决。

在vcxproj XML生成输出类型将显示为为值<ConfigurationType>元素。

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>

类似的项目属性页中Configuration Properties -> General -> Configuration Type中,可以指定你的组件构建什么作为。 你甚至可以与目标偏离延伸如果建立了一些BoostPython东西我改变的DLL PYD时才有意义,例如。

为了突出那种靠不住的mixup的我说的,这可能因错误或有缺陷的合并或东西来了,你可以检查你的逐项构建设置有什么解决方案配置下的每个项目。 我在下面给出其中的解决方案平台ReleaseOffline但在解决各种项目进行拨号,到发布,DebugStatic等许多项目被关闭的截图,但你能想象的依赖越来越东西变成一个坏的查询股价的例子状态混合生成类型。 有些mixups可能是有意所以一定要确保你知道你在做什么/寻找,因为Visual Studio的借这种在这些配置的灵活性。 别忘了,你看到的设置特定于选定的配置/平台对。 改变任何这些的,你可能会看到在所有的被上面所说的值的变化。



文章来源: Compile check if compiling as static library