【发布时间】:2020-03-12 16:05:13
【问题描述】:
我的项目需要同时使用 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 文件以便编译器可以选择正确的包含文件?
【问题讨论】:
-
查看项目的
Properties\Configuration Properties\C/C++\General和顶部条目Additional Include Directories。E:\3rdParty\MKL\2017.1.143\windows\compiler\include在吗?如果是,请尝试将C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include;放在它前面(如果math.h甚至在该目录中,您最好检查一下)。 -
@TedLyngmo - 路径已经按照您的指示进行了排序。我确认
math.h在那个包含目录中。 -
好的,
cmath文件中是否有一些#ifdef阻止cmath访问#includeingmath.h?
标签: c++ visual-c++ cmake redefinition