- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在努力删除 CMake 作为库的依赖项,因为它似乎可以将大部分生成的代码设为静态。执行一些环境检查以查看我们使用的是哪种操作系统和编译器。 CMake 中的其中一项检查如下所示:
if (MSVC)
set (HAVE_SYS_TYPES_H 1)
set (HAVE_STDINT_H 1)
set (HAVE_STDDEF_H 1)
# snip more things
else ()
# snip more things
endif ()
可以用下面的 C 代码代替吗?
#ifdef _MSC_VER
#define HAVE_SYS_TYPES_H
#define HAVE_STDINT_H
#define HAVE_STDDEF_H
// snip more things
#else
// snip more things
#endif
我最担心的是情况是否相同。我认为它们是,但我无法找到任何可以证实这一点的东西,而且我目前无法访问工作的 Windows 开发环境来构建它并找出答案。
感谢您提供的任何可能的帮助!
最佳答案
CMake 3.4 MSVC Documentation :
True
when using Microsoft Visual C++.Set to
true
when the compiler is some version of Microsoft Visual C++.
MSDN Predefined Macros Documentation :
Lists the predefined ANSI/ISO C99 and Microsoft C++ implementation preprocessor macros.
...
Microsoft-Specific Predefined Macros
_MSC_VER Evaluates to an integer literal that encodes the major and minor number components of the compiler's version number. ...
由于 CMake MSVC
在使用 Microsoft Visual C++ 时为真,而 _MSC_VER
是 Microsoft 特定的 C++ 宏,因此在确定编译是否使用 Microsoft编译器。
但是,我不确定 #define
语句。 CMake set
命令只是设置 CMake 变量了解如何在 CMake 脚本中使用这些变量会很有用。
您拥有的可能就足够了,或者可能:
#define HAVE_SYS_TYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_STDDEF_H 1
CMake add_definitions
命令是添加预处理器定义的一种方法。
关于c++ - 来自 CMake 的 MSVC 是否与 _MSC_VER 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33001659/
我正在针对使用 Visual Studio 2010 编译的 Ruby 库编写一个 Ruby C 扩展。(我无法更改它,也无法重新编译我正在构建的 Ruby 核心,因为它嵌入在第三方应用程序中。) 我
我在 VS2013 的 winnt.h 文件中发现了这段奇怪的代码。 #ifdef STRICT typedef void *HANDLE; #if 0 && (_MSC_VER > 1000) /
我有一个导入到 VS 2015 中的 VS 2010 C++/CLI 项目。因为它链接到我无法控制的一些 VS 2010 C++ 库,所以我需要使用 VS 2010 编译器对其进行编译。当我将项目导入
我从一位已离职的同事那里继承了一个旧程序。这是我们使用的 CPLEX 优化。它是使用 Visual Studio 2005 和 CPLEX121 在 C++ 内部构建的。它所在的服务器正在退役,我们正
尝试在 Windows 7 上的 VS2010 中设置 Directx11 时出现以下错误。这是什么原因造成的?我已经设置了所有目录和链接器文件,但我一直遇到这个问题。 谢谢。 1>------ Bu
我目前正在努力删除 CMake 作为库的依赖项,因为它似乎可以将大部分生成的代码设为静态。执行一些环境检查以查看我们使用的是哪种操作系统和编译器。 CMake 中的其中一项检查如下所示: if (MS
我在 VS2017 中编译项目时遇到以下问题: 1>libPolyFill.lib(libPolyFill.obj):错误 LNK2038:检测到“_MSC_VER”不匹配:值“1800”与 clie
我是 C++ 和 Boost 的新手。我正在做一个简单的小程序来尝试学习 Boost Filesystem 库。我已经按照说明构建了 Boost 库。现在,当我尝试编译这个简单的代码时,我遇到了其中的
我开始玩 OGRE 并下载了它。我使用 MS Visual Studio 2013 Express。我看到没有 VS2013 的 SDK,所以我下载了 VS2012 的。然后我下载了 Tutorial
我正在将我的项目从 VS2010 转换到 VS2012。但是我在某些项目中遇到了 _MSC_VER 链接器错误。经过长时间的谷歌搜索后,我发现问题是由于将 VS2010 中创建的库链接到 VS2012
我正在将我的项目从 VS2010 转换为 VS2012。但在某些项目中出现 _MSC_VER 链接器错误。通过谷歌浏览了很长时间后,我发现问题是由于在 VS2010 中创建的库链接到 VS2012。
我尝试在 Visual Studio 2012 中使用 Qt5.0.1 编译一个简单的 GUI 应用程序,但出现以下错误: qtmaind.lib(qtmain_win.obj) : error LN
我收到了一个新开发的 SDK 的示例应用程序,但我无法编译它 - 由于 ATL 的原因,它根本无法在 Visual Studio Express 中编译,而且这似乎是Microsoft 仍然提供的 V
我是一名优秀的程序员,十分优秀!