c++ - 在同一项目中使用两个不同的数学库会使Visual C++困惑

标签 c++ visual-c++ cmake redefinition

我的项目需要同时使用Micorsoft Visual C++ math.h和Intel MKL math.h

使用详细信息进行构建,我得到:

1>  Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\cmath
1>  Note: including file:         E:\3rdParty\MKL\2017.1.143\windows\compiler\include\math.h
1>  Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\../../vc/include/math.h
1>  Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\crtdefs.h
1>  E:\3rdParty\MKL\2017.1.143\windows\compiler\include\math.h(1577): warning C4005: 'HUGE_VALF' : macro redefinition
1>          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\../../vc/include/math.h(104) : see previous definition of 'HUGE_VALF'
1>  E:\3rdParty\MKL\2017.1.143\windows\compiler\include\math.h(1579): warning C4005: 'HUGE_VALL' : macro redefinition
1>          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\../../vc/include/math.h(105) : see previous definition of 'HUGE_VALL'
1>  E:\3rdParty\MKL\2017.1.143\windows\compiler\include\math.h(1581): warning C4005: 'HUGE_VAL' : macro redefinition
1>          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\../../vc/include/math.h(96) : see previous definition of 'HUGE_VAL'

“'HUGE_VALF':宏重新定义”消息使我感到怀疑。

起初,我只是禁用了该警告,但是考虑到此选项只会掩盖潜在的问题,我正在寻找替代解决方案。

从第1行和第2行,您可以看到Visual Studio的cmath不像应有的那样包括Visual Studio的math.h,但包含相同名称的MKL文件。

如何设置CMakeLists.txt文件,以便编译器可以选择正确的包含文件?

最佳答案

只需包装一个库。

例如,创建头文件:

#pragma once

namespace imath {
    double sin(double a);
}

在cpp中

#include "Wrapper.h"
#include <intel/math.h>

namespace imath {
    double sin(double a) {
        return ::sin(a);
    }
}

对需要在通用源中使用的每个符号执行此操作。

并且不包括您正在使用C++的Cmath.h版本,所以不包括#include <cmath>

关于c++ - 在同一项目中使用两个不同的数学库会使Visual C++困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60657841/

相关文章:

c++ - C++中某些类型的指针之间的距离有什么限制?

c++ - msvc/permissive- std::string 重载运算符 '=' 不明确

c++ - 访问冲突写入位置 0xcccccccc 使用字符串

c++ - 使用 cuda_add_executable 命令的 Cmake 错误

c++ - 如何从图像中提取 FAST 特征?

c++ - 为什么输出显示为无符号数

c++ - Visual Studio 2017 的 CMake 多项目设置

c++ - 从现有 Makefile 创建 CMakeLists 文件

c++ - 如何减少protobuf生成的代码?

c++ - Visual C++ 静态初始值设定项异常行为