小编Man*_*ena的帖子

cmake 不断添加 std=gnu++11 选项

我正在尝试使用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。

我不知道我还能尝试什么...

macos gcc std cmake

6
推荐指数
2
解决办法
3563
查看次数

Fortran函数返回数组时的最佳实践是什么?

假设我想编写一个函数,该函数将一个维度的数组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中实现的最佳方法吗?

arrays heap stack fortran function

4
推荐指数
1
解决办法
172
查看次数

标签 统计

arrays ×1

cmake ×1

fortran ×1

function ×1

gcc ×1

heap ×1

macos ×1

stack ×1

std ×1