使用 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 支持 的相关文章

  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 如何确定 std::function 的参数数量?

    我有以下问题 假设您想编写一个可以采用 lambda 表达式的通用函数 我知道如果参数是 std function 类型 那么我不仅可以使用 lambda 还可以使用函数 甚至可以使用函数指针 所以第一步 我做了以下事情 void prin
  • 如何在 C++ 项目的 Cmake 文件上添加 Mac OS 框架

    我正在尝试将外部库 Vulkan 添加到我的项目中 这个库是预编译的并且有一个框架 我的项目树 build source Entry main cpp include ext vulkan macos include lib Framewo
  • 在不支持线程的程序加载的共享库中使用 C++11 多线程

    我目前正在尝试在共享库中使用 C 11 多线程 该库加载到 Linux 上的主程序 用 C 编写 中 这是一个大型模拟程序的一部分 我无法更改有关库加载的任何内容或更改一般的主程序 主程序是用 gcc 4 1 2 编译的 我没有它的源代码
  • 保证静态对象的静态(常量)初始化

    最重要的问题是 程序员如何确保他的非局部静态变量是通过静态初始化而不是通过动态初始化来初始化的 由于总是进行零初始化 因此应该查看常量初始化 3 6 2 2 对象 o 的常量初始值设定项是一个常量表达式 只不过它也可以调用 constexp
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • const 和 constexpr 数组之间的区别

    为什么有区别const and constexpr当与数组一起使用时 int const xs 1 2 3 constexpr int ys 1 2 3 int as xs 0 error int bs ys 0 fine 我希望两者都能x
  • 最小化 MC 模拟期间存储的 cuRAND 状态数量

    我目前正在 CUDA 中编写蒙特卡罗模拟 因此 我需要生成lots使用随机数cuRAND图书馆 每个线程处理一个巨大的元素floatarray 示例中省略 并在每次内核调用时生成 1 或 2 个随机数 通常的方法 参见下面的示例 似乎是为每
  • C++11 Geany 设置

    我正在学习 C 我需要在 Geany 中为 C 11 正确设置编译和构建命令 我以为我的理解是正确的 但是当使用时auto 我收到以下错误 warning auto will change meaning in C 0x please re
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • remove_reference 如何禁用模板参数推导?

    根据这个链接 https stackoverflow com questions 7779900 why is template argument deduction disabled with stdforward 不允许模板参数推导st
  • 为什么我不能将 与 g++ 4.9.2 一起使用?

    我正在尝试使用文件系统 http en cppreference com w cpp experimental fs path 我有 std c 11 std c 1y in my CMakeLists txt 海湾合作委员会版本是4 9
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • C++11 基于范围的 for 循环效率“const auto &i”与“auto i”

    在 C 11 中 我可以像这样迭代一些容器 for auto i vec std cout lt lt i lt lt std endl 但我知道这是不必要的 不必要地 因为我只需要print的价值观vec 复制 EDIT 的每个元素vec
  • std::enable_shared_from_this::shared_from_this 的工作原理

    我就是不明白怎么办std enable shared from this shared from this返回一个与现有指针共享所有权的共享打印机 换句话说 你做this http en cppreference com w cpp mem
  • 具有 Cuda Thrust 的多个 GPU?

    如何将 Thrust 与多个 GPU 一起使用 这只是使用 cudaSetDevice deviceId 的问题吗 然后运行相关的 Thrust 代码 使用 CUDA 4 0 或更高版本 cudaSetDevice deviceId 接下来
  • 在cmake中,什么是“项目”?

    这个问题是关于project命令 推而广之 是什么concept of a project意思是cmake中的 我真的不明白什么是project是 以及它与target 我想我确实理解 我看了一下cmake 文档project http w
  • 可以使用多个 _Generic 创建字符串文字吗?

    有没有办法使用 Generic在同一表达式中多次使用关键字来创建单个字符串文字 我正在寻找的是一种方法 例如生成要传递给的单个格式字符串printf 所有转换说明符都适应正确的类型 写作时this https stackoverflow c
  • CMake:连续编译程序两次

    为了能够进行许多自动优化 我希望能够使用标志编译我的程序 fprofile generate首先 然后运行它生成配置文件 然后使用以下命令重新编译程序 fprofile use反而 这意味着我想连续编译我的程序两次 使用两个不同的CMAKE

随机推荐

  • 将基于类的组件转换为钩子(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 很容易