【问题标题】:C++ conditional link with preprocessor与预处理器的 C++ 条件链接
【发布时间】:2018-07-16 17:26:03
【问题描述】:

我有一个 MSVC C++ 项目,我通过在项目属性的 C++/预处理器部分中传递指定的预处理器定义来有条件地编译部分源代码。

我还想做的是根据预处理器定义有条件地链接库,我该如何实现?

例如在我的项目中,如果定义了 CLSOPENLDV,我想排除:

nodetalk32_vcpp.obj

并包括:

ldv32.lib

当它没有被定义时,我想做相反的事情。

【问题讨论】:

  • 了解#pragma comment
  • 您可以使用语句ifdef(在头文件中)或ifeq(在Makefile中)来决定要包含或链接哪些库:-)
  • @Paradowski MSVC C++ 项目不太可能由 makefile 驱动...
  • @SPlatten 不太:#pragma comment( lib, "mylib" ) 也影响链接器。此编译指示是 Microsoft 特定的c
  • @SPlatten 第一个问题是:你为什么要这么做?即使将库传递给链接器,链接器也应该发现不需要库的符号并忽略它们。

标签: c++ visual-c++ hyperlink preprocessor


【解决方案1】:

你可能需要这个:

#ifdef SOME_MACRO
#pragma comment( lib, "ldv32" )
#endif

这是微软特有的,它可能不适用于 gcc、clang 或其他编译器。

对于排除nodetalk32_vcpp.obj,我唯一能想到的就是:

#ifndef SOME_MACRO
  // content of nodetalk32_vcpp.cpp
#endif

【讨论】:

  • 已排序,编译指示中不需要“.lib”,遗憾的是我没有 nodetalk32_vcpp 的源代码
  • 使用VS2017,需要.lib结尾。
猜你喜欢
  • 2012-03-28
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2014-04-02
相关资源
最近更新 更多