我正在尝试使用C++编译一个项目cmake,并且在项目的页面中,他们告诉我如果我不添加标准 98 它将崩溃。(我在 mac 上)我已经尝试了所有我在互联网上找到,我可以设法cmake使用该选项,-std=c++98但它也添加了-DNDEBUG -std=gnu++11. (我看到它使用 makeVERBOSE=1选项)
我想摆脱它。使用该--trace选项,我可以看到该选项设置在地窖文件夹中的文件中,也就是说,与cmake它本身有关,而不是在CMakeList.txt我使用的文件中。
我怎么解决这个问题?
如果它可以帮助我尝试编译的代码是这样的: SAMoS
谢谢你。
更新:
使用该--trace选项,我能够看到-std=gnu++11在文件中选择了该选项:
/usr/local/Cellar/cmake/3.9.4.1/share/cmake/Modules/Compiler/GNU-CXX.cmake
可以在这里看到GNU-CXX.cmake
如果我以每个 if 将选项设置为-std=c++98then的方式编辑该文件,cmake 会抱怨给我下一个错误:
src/CMakeLists.txt 中的 CMake 错误:
CXX 编译器不知道编译器特性“cxx_nullptr”
“GNU”
版本 7.2.0。
我不知道我还能尝试什么...
假设我想编写一个函数,该函数将一个维度的数组x作为输入,并基于该数组返回相同维度的另一个数组y(为了说明这一点,我正在使用将其乘以2的函数)。对于该代码,我有两个选择:
function times2(x) result(y)
real, intent(in) :: x(:)
real, allocatable :: y(:)
allocate(y(size(x))
y = 2*x
end function
Run Code Online (Sandbox Code Playgroud)
要么
function times2(x,n) result(y)
real, intent(in) :: x(n)
integer, intent(in) :: n
real :: y(n)
y = 2*x
end function
Run Code Online (Sandbox Code Playgroud)
就个人而言,我更喜欢第一个,因为它更易于调用方使用,但是我不确定哪个在内存方面更好,假设数组x可以很大,我不知道成为a会更好。延迟数组或自动数组。无论如何,这是在现代Fortran中实现的最佳方法吗?