【发布时间】:2021-08-10 16:41:19
【问题描述】:
我一直在构建多个需要 sse2 指令集的项目。到目前为止,添加-march=native 中提到的sse2 instruction set not enabled 已经完成了这项工作。
但是,在我需要这个的 3 个项目中,makefile 中的 gcc 命令很容易找到,并且稍微编辑了 makefile 就可以了。现在我处理一个由 cmake 生成的更复杂的 makefile。我相信它会在其他文件夹中生成更多的 makefile,然后运行它们等等。因此,仅添加一个简单的 -march=native 既不理想也不容易,而且如果可行的话,将花费大量时间。
有没有办法以某种方式始终启用 sse2,与现在相反?我用谷歌搜索了这个,但找不到东西。
鉴于我从 github 下载的所有 makefile 都没有 -march=native 内部,这让我相信确实有一些方法可以预先在 gcc/g++ 级别上设置它?
我找到了这个 -mfpmath=sse 标志,但无法制定正确的 gcc/g++ 命令(如果相关的话)。
你能帮帮我吗?
【问题讨论】:
-
在生成makefile之前,您应该将
-march=native添加到CMakeLists.txt文件中的CMAKE_CXX_FLAGS变量中,而不是编辑生成的makefile。 -
你能给出确切的代码吗?如果可行,也请将您的答案作为单独的答案提供,以便我接受。为了帮助您,目前 CMakeLists.txt 中甚至没有设置 CXX_FLAGS
-
SSE2 是 x86-64 的基线,即现代系统上的正常编译(生成 64 位可执行文件)默认情况下已经包含
-msse2。只有在构建过时的 32 位二进制文件时才需要手动使用它。 (尽管如果您只想在这台计算机上运行二进制文件,或者类似的更新版本,您仍然应该使用-march=native。)
标签: c++ linux makefile cmake sse