我的项目需要同时使用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++的
C
的math.h
版本,所以不包括#include <cmath>
。
关于c++ - 在同一项目中使用两个不同的数学库会使Visual C++困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60657841/