使用 CMake 触发 NVCC 中的 C++11 支持

2024-01-07

我正在运行带有 CUDA 7.5 的 Ubuntu 15.10。 CMmake 是 v3.2.2,NVCC 是版本 7.5,v7.5.17; GCC是Ubuntu 5.2.1-22ubuntu2 v5.2.1

在常规项目中触发 C++11 很容易:

project(foo CXX)
set(TARGET foo CMAKE_CXX_STANDARD 11)

我正在定义我的 CUDA 项目:

find_package(CUDA REQUIRED)
CUDA_ADD_EXECUTABLE(foo ${foo_src} ${foo_hdr} ${foo_cu})

但 C++11 支持不会传播到 NVCC。我必须补充:

list(APPEND CUDA_NVCC_FLAGS "-std=c++11")

这看起来像是一个拼凑。据报道,最近显然有这方面的工作这个任务 http://redmine.gromacs.org/issues/1390,但我一直找不到结果。

在将项目声明为 C++11 时,如何让 CMake 自动设置 C++11 标志?

编辑:我已经使用 CUDA 8.0 和 CMake 3.5.1 重新回答了这个问题。

来自文档 https://cmake.org/cmake/help/v3.1/module/FindCUDA.html, set(CUDA_PROPAGATE_HOST_FLAGS ON)将传播的内容CMAKE_CXX_FLAGS,因此以下内容将为 cpp 和 nvcc 触发 C++11:

set (CMAKE_CXX_FLAGS "--std=c++11")
set (CUDA_PROPAGATE_HOST_FLAGS ON)

然而,set(CMAKE_CXX_STANDARD 11)不影响CMAKE_CXX_FLAGS,因此以下给出了 C++11 设备代码的编译器错误,因为没有任何内容可以传播:

set (CMAKE_CXX_STANDARD 11)
set (CUDA_PROPAGATE_HOST_FLAGS ON)

我似乎找不到避免显式设置的 CMake 命令组合--std=c++11在 CXX 或 CUDA 标志中。


从 CMake 3.8 开始(因为 CMake 支持 CUDA 作为语言),有一个新的目标属性CUDA_标准 https://cmake.org/cmake/help/v3.8/prop_tgt/CUDA_STANDARD.html#prop_tgt:CUDA_STANDARD。虽然它的名字很混乱,但它添加了-std=XXX to the nvcc编译命令。

对于最近的 CMake 版本,正确的方法是

cmake_minimum_required(VERSION 3.8.2)
enable_language(CUDA)
add_executable(foo ${foo_src} ${foo_cu})
set_property(TARGET foo PROPERTY CUDA_STANDARD 11)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CMake 触发 NVCC 中的 C++11 支持 的相关文章

  • 实现可以指定未定义的行为吗

    3 4 1 1 实现定义的行为未指定的行为 其中每个实现都记录了如何做出选择 在未定义行为是可能结果的情况下 实现是否可以指定实现定义的行为是未定义的行为 例如 6 3 1 3 有符号和无符号整数3 否则 新类型是有符号的 并且值不能在其中
  • 其他线程可以修改线程本地内存吗?

    假设我有以下声明 thread local std atomic
  • 我可以安装共享导入库吗?

    我有一个外部项目和一个导入的共享库 include 目录和 implib 都可以正常工作 但尝试安装共享库 dll 失败并出现以下错误 install TARGETS given target my shared lib which doe
  • 为什么转发引用与右值引用具有相同的语法?

    我刚刚对这些 相当 新的功能做了一些研究 我想知道为什么 C 委员会决定为它们引入相同的语法 看来开发人员不必要浪费一些时间来理解它是如何工作的 而一种解决方案可以让我们思考进一步的问题 就我而言 它是从问题开始的 可以简化为 includ
  • 是否可以让 cmake 构建文件(CMakeLists.txt)不在 CLion 的根目录中

    是否可以让 cmake 构建文件 CMakeLists txt 不在 CLion 的根目录中 我目前正在开发的项目中 cmake 构建文件不在 CLion 项目的根目录中 在 out Debug 目录中 我希望 CLion 打开该项目的根目
  • std::istringstream >> 使奇怪的行为加倍

    下面的代码打印0在 mac osx 上使用 clang 其他地方都会打印5 clang https ideone com mVgpzS gcc https ideone com oZ0hy6 include
  • CUDA-Kernel 应该根据块大小动态崩溃

    我想做稀疏矩阵 密集向量乘法 假设用于压缩矩阵中条目的唯一存储格式是压缩行存储 CRS 我的内核如下所示 global void krnlSpMVmul1 float data mat int num nonzeroes unsigned
  • 整数的复制与 std::move

    在该示例中 默认复制和 std move 有什么区别 After move新旧对象之间是否存在依赖关系 int main int a 100 std cout lt lt a lt
  • 如何从C++头文件调用CUDA文件?

    我知道从 c 文件调用 cu 文件的方法 但现在我想从 C 头文件调用 cu 文件 有可能做到吗 如果是这样 我应该如何设置我的项目 请帮忙 这是一个有效的例子 file1 h int hello file2 h include
  • static_assert 有什么作用,你会用它做什么?

    你能举个例子吗static assert C 11 会优雅地解决手头的问题吗 我熟悉运行时assert 我应该选择什么时候static assert 超过常规assert 另外 在boost有一种东西叫做BOOST STATIC ASSER
  • 如果函数在类范围内声明,则 constexpr 不起作用[重复]

    这个问题在这里已经有答案了 我使用的是 g 4 8 0 它不包含早期版本constexpr漏洞 因此下面的代码有效fine http ideone com YkmUDJ constexpr int size return 5 int arr
  • 执行 INSERT into 数据库后如何获取插入行的 id?

    我正在使用 c 11 和 pqxx 访问 postgresql 数据库 我需要插入行的 id 和标志 如果成功与否 执行 INSERT into 数据库后如何获取插入行的 id 我试图在网上找到例子但没有成功 work txn conn t
  • C++ 11 相当于 java.util.ConcurrentHashMap

    我发现自己不断地编写互斥体代码 以便同步对 std unordered map 和其他容器的读 写访问 以便我可以像使用 java util concurrent 容器一样使用它们 我正要开始编写一个包装器来封装互斥体 但我宁愿使用经过良好
  • 如何降级cuda版本

    我目前使用的是 cuda 版本 4 2 但我需要将其更改为 3 1 是否可以卸载当前版本 4 2 版 然后安装以前的版本 3 1 版 编辑 请参阅我的操作系统是linux ubuntu 10 04 64位 编辑 我找到了如何获取 3 1 版
  • 参数数量在编译时确定的 Lambda 函数

    我想声明一个带有 N 个参数的 lambda 函数 其中 N 是模板参数 就像是 template
  • 将 cuda 数组传递给 Thrust::inclusive_scan

    我可以对 cpu 上的数组使用包容性扫描 但是否可以对 gpu 上的数组执行此操作 注释是我知道有效但我不需要的方式 或者 是否有其他简单的方法可以对设备内存中的数组执行包含扫描 Code include
  • 如何配置 cmake 在修改非 .cpp 源文件时重新编译目标

    如果我们看下面的最小示例 cmake minimum required VERSION 3 20 project example add executable PROJECT NAME main cpp test txt 一旦可执行目标被构
  • 如何转储所有 NVCC 预处理器定义?

    我想达到同样的效果 gcc dM E lt dev null 如所描述的here https stackoverflow com q 2224334 1593077 但对于 nvcc 也就是说 我想转储所有 nvcc 的预处理器定义 唉 n
  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 如何在cmake中静态链接到glibc

    我正在尝试从 Fedora 构建一个可以在 RedHat 6 机器上运行的包 所以我需要构建和静态链接一些RedHat机器中不存在的库 我发现我可以你 static libgcc or static libstdc 与标准库的静态版本链接

随机推荐

  • 将基于类的组件转换为钩子(gapi API)

    我有这个基于类的组件 使用gapi Google Auth API来呈现按钮并且它可以工作 import React from react class GoogleAuth extends React Component state isS
  • 正确关闭 ActiveMQ 和 Spring DefaultMessageListenerContainer

    当 Tomcat 管理器发出 停止 命令时 我们的系统不会关闭 我已确定与ActiveMQ Spring有关 我什至已经弄清楚如何让它关闭 但是我的解决方案是一个黑客 至少我希望这不是 正确 的方法 我想知道关闭 ActiveMQ 的正确方
  • 如何正确更改MaterialAlertDialog文本颜色?

    我尝试仅使用 Material Components 中的小部件 但在许多情况下 没有记录如何实现样式 让我们考虑一下MaterialAlertDialog 每次我想显示一个对话框时 我都会调用这部分代码 MaterialAlertDial
  • Scanf/Printf 双变量 C

    假设我有以下 C 代码 double var scanf lf var printf lf var printf f var 它从标准输入变量 var 读取 然后在标准输出 var 中打印两次 我知道这就是您从标准输入读取双变量的方式 但我
  • Tensorflow表查找int->float

    给定一个包含整数 代表类 的未知维度 的 2D 张量 我想获得一个相同形状的新张量 但用从查找表中获取的浮点数替换值 代表类权重 例如 inputs 1 3 3 2 4 2 lookup table 1 0 2 2 0 25 3 0 1 4
  • OS X 安装 Sphinx:找不到“sphinx-build”和“sphinx-quickstart”

    关于这个主题 有几个 未答复 的帖子 涉及找不到 sphinx build 在 Mac 操作系统中找不到 sphinx build h 命令 https stackoverflow com questions 24582037 locati
  • 包含流中包含 JSF 标签/组件的动态内容

    我正在开发一个应用程序 我想在其中包含来自流的动态 XHTML 内容 为了处理这个问题 我编写了一个标记处理程序扩展 它将动态 XHTML 内容转储到输出组件 如下所示 UIOutput htmlChild UIOutput ctx get
  • 优化图片的javascript预加载

    我想知道是否有人有任何通过 javascript 优化图像预加载的策略 我正在将 Flash 应用程序移植到 html css 中 尝试重新创建尽可能接近原始站点的 UI 它本质上是一个照片浏览器应用程序 当用户将鼠标悬停在链接上时会显示高
  • 按“后退”按钮时,未使用 setResult() 在 onPause() 中设置结果

    我有 2 项活动 AAA 和 BBB 我使用 AAA 从 AAA 呼叫 BBBstartActivityForResult 意图 int 完成 BBB 后 我按 后退 按钮返回 AAA 在 BBB 中 我重写 onPause 并使用以下方法
  • 在 Threejs 平面上渲染 TMX 地图

    使用新代码更新了问题 我正在尝试编写一个 WebGL 着色器来绘制TMX层 https github com bjorn tiled wiki TMX Map Format 从 Tiled 编辑器导出 我正在使用 THREE js 创建一个
  • Keycloak - 权限和策略仅在使用“评估”选项卡时有效

    我们的团队正在寻求使用Policies Permissions在 Keycloak 中 在用户登录时向用户授予范围 但前提是他们具有特定角色 我已经完成了几个教程 并成功地使用它进行了设置和测试Evaluate选项卡 在Authorizat
  • 部署项目未更新 .exe

    我有一个 Winforms 项目 其中一个 exe 文件作为主要输出 我正在使用部署项目来分发它 但是安装新版本时 exe 文件没有更新 这意味着我必须要求用户手动卸载然后安装新版本 这就是我正在做的 我在输出项目上增加程序集版本 这是部署
  • 如何动态构建mongodb查询

    我在 mongodb 聚合中有一个匹配表达式 匹配中包含 3 个字段 但它们并不总是包含数据 我只想在字段不为空时将字段包含在匹配中 如果所有字段都有数据 则匹配的样子 但例如 如果用于studentGradeLevels为空 那么我不想包
  • 加快极其缓慢的 MinGW-w64 编译/链接速度?

    如何加快 MinGW w64 的速度极其C 编译 链接速度慢 编译一个简单的 Hello World 程序 include
  • Kafka:动态更新 jaas 配置

    我已经使用 kafka 设置了 jaas 配置sasl jaas config财产 我想更新此配置并动态添加用户 根据这个文档 http kafka apache org 11 documentation html dynamicbroke
  • C#.NET 使用块

    我想在我的 DAL 层中使用 using 块 喜欢 using SqlConnection con new SqlConnection connection string Command object Reader object 由于 Sq
  • 使用 html5 拖放时滚动[重复]

    这个问题在这里已经有答案了 我刚刚发现 当使用 HTML5 拖放时 尝试使用鼠标滚轮或鼠标垫滚动页面将不起作用 并且不会调用 onmousewheel 事件的侦听器 作为示例 请参见此处 http jsfiddle net 92u6K 2
  • 使用 ASP.net core C# 在 MVC 应用程序中会话过期或空闲时间后重定向到登录页面

    我正在使用 ASP NET Core 我想在会话过期或用户空闲 10 分钟时重定向到登录页面 我怎样才能实现这个目标 目前 正在发生注销 当用户单击任何链接或提交按钮时 应用程序会重定向到登录页面 当用户单击按钮或链接时会发生这种情况 我想
  • 添加视图到 Django 管理

    有没有办法将自定义视图添加到 Django 管理应用程序 具体来说 我希望能够将 内容 div 切换为自定义静态内容 同时保留 页眉 和 页脚 div 这与重定向到静态 HTML 页面不同 后者不会保留页眉和页脚 您只需照常配置视图 url
  • 使用 CMake 触发 NVCC 中的 C++11 支持

    我正在运行带有 CUDA 7 5 的 Ubuntu 15 10 CMmake 是 v3 2 2 NVCC 是版本 7 5 v7 5 17 GCC是Ubuntu 5 2 1 22ubuntu2 v5 2 1 在常规项目中触发 C 11 很容易