对于vs2019错误:
fatal error C1189: #error: “You have to define _USE_MATH_DEFINES in the compiler settings!”
vs2019的错误输出如下:
[1/3] Building CXX object CMakeFiles\variational.dir\MeshDefinition.cpp.obj
FAILED: CMakeFiles/variational.dir/MeshDefinition.cpp.obj
D:\VS2019\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe /nologo /TP -DIMGUI_IMPL_OPENGL_LOADER_GLAD -DNOMINMAX -ID:\VSA_paper\ANN_related_files\ANN\src -I_deps\libigl-src\include -I_deps\glad-src\include -I_deps\glfw-src\include -I..\..\..\..\imgui -I..\..\..\..\imgui\backends -I_deps\eigen-src -I"D:\Program Files (x86)\OpenMesh 8.1\include" -IH:\VTK\install\include\vtk-9.0 /DWIN32 /D_WINDOWS /GR /EHsc, /O2 /Ob2 /DNDEBUG -MD /MP /bigobj /showIncludes /FoCMakeFiles\variational.dir\MeshDefinition.cpp.obj /FdCMakeFiles\variational.dir\ /FS -c ..\..\..\MeshDefinition.cpp
D:\Program Files (x86)\OpenMesh 8.1\include\OpenMesh\Core\System\compiler.hh(110): fatal error C1189: #error: "You have to define _USE_MATH_DEFINES in the compiler settings!"
可以看出,出错的地方位于MeshDefinition.cpp文件,并且与OpenMesh有关
解决办法:
添加定义_USE_MATH_DEFINES在我的OpenMesh的include语句的前面解决了问题。
#define _USE_MATH_DEFINES
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
注意!无论是MeshDefinition.cpp还是MeshDefinition.h,只要有OpenMesh的include语句,均要在include语句前面加上#define _USE_MATH_DEFINES
另一种解决办法:
在“项目-属性-C/C+±预处理器-预处理器定义”中添加“_USE_MATH_DEFINES”