• nvcc编译器之编译选项(chapter 4)


    目录

    4. NVCC编译选项

    4.1 命令选项类型和符号

    4.2 命令选项描述


    4. NVCC编译选项

    4.1 命令选项类型和符号

    每个nvcc选项都有一个长名称和一个短名称,它们之间可以相互替换。这两种选项的区别在于选项名称前面连字符(-号)的数目。长名称前面必须有两个连字符(--),而短名称前面必须有一个连字符(-)。例如,-I是--include-path的简写。长选项用于构建脚本,因为选项的长度不如选项名提供的描述性语义的清晰性重要。相比之下,短选项是为了交互使用。

    NVCC可以识别三种类型的命令选项:布尔选项、单值选项和列表选项

    布尔选项没有参数,它们可以在命令行上指定,也可以不在命令行上指定;
    单值选项最多只能指定一次;
    列表选项可以重复;
    如下示例这三类选项:
    --verbose(切换到详细信息模式);
    --output-file(指定输出文件);
    --include-path(指定包含路径);

    单值选项和列表选项必须有参数,参数必须在选项本身的名称后面,加上多个空格或等号字符。当使用- I、-l和-L等短选项名称时,选项的值也可以紧接在选项本身后面,而不用空格或等号分隔。列表选项的各个值可以在选项的单个实例中用逗号分隔,或者选项可以重复,或者这两种情况的任意组合。

    如下示例:

    1. -o file
    2. -o=file
    3. -Idir1,dir2 -I=dir3 -I dir4,dir5

    本文档中使用长选项描述,除非另有指定。但是,可以使用短选项代替长选项,以达到相同的效果。

    4.2 命令选项描述

    4.2.1 File和Path规范

    • --output-file file(-o): 指定输出文件的名称和位置
    • --pre-include file, ...(-include): 指定预处理中必须提前包含的头文件
    • --library library,...(-l): 指定要在链接阶段使用的库(不包含库文件的扩展名),库文件从--library-path指定的路径中搜索。
    • --define-macro def,...(-D): 定于预处理阶段会使用到的宏。

    def格式有两种:

    • name : 提前定义‘name’作为一个宏
    • name=definition:definition的内容被token化,并进行预处理。类似使用#define指令定义后在编译器翻译的阶段三的处理过程。definition将会被植入换行符截断
    • --undefine-macro def,...(-U): 在预处理或编译阶段,undefine一个已经存在宏
    • --include-path path,...(-I): 指定include的查找路径
    • --system-include path,...(-isystem): 指定系统include的查找路径
    • --library-path path,...(-L)
    • --output-directory directory(-odir)
    • --dependency-output file(-MF)
    • --compiler-binder directory(-ccbin)
    • --allow-unsupported-compiler(-allow-unsupported-compiler)
    • --archiver-binary executable(-arbin)
    • --cudart{none|shared|static} (-cudart)
    • --cudadevrt{none|static} (-cudadevrt)
    • --libdevice-directory directory(-ldir)
    • --target-directory string(-target-dir)

    4.2.2 指定编译阶段的相关选项

    指定输入文件必须编译到哪个阶段。

    • --link(-link): 指定默认行为,编译并链接所有文件。默认输出a.exe(windows平台)或a.out(其它平台)。
    • --lib(-lib): 编译所有的输入文件到目标文件(.o),并将结果添加到指定的库输出文件中。默认输出a.lib(windows平台)或a.a(其它unix平台)。
    • --device-link(-dlink): 将可重定位设备代码的目标文件和.ptx,.cubin以及.fatbin文件链接到具有可执行设备端代码的目标文件中(生成设备可执行代码),该目标文件可以继续由主机链接器进行链接。生成a_dlink.obj(windows平台)或a_dlink.o(其它Unix平台),当该选项和--fatbin 联合使用时,生成a_dlink.fatbin;当该选项和--cubin 联合使用时,生成a_dlink.cubin。
    • --device-c(-dc): 编译每个.c,.cc,.cpp,.cxx和.cu输入文件为可重定位的设备目标文件中。等同于使用--relocatable-device-code=true --compile 。默认每个文件生成*.obj(在windows平台)或.o(类Unix平台)。
    • --device-w(-dw): 编译每个.c,.cc,.cpp,.cxx和.cu输入文件为可重执行设备端代码的目标文件中。等同于使用--relocateable-device-code=false --compile 。默认生成*.obj(windows平台)或.o(类Unix平台)。
    • --cuda(-cuda): 编译每个.cu文件为.cu.cpp.ii文件。
    • --compile(-c):编译每个.c,.cc,.cpp,.cxx和.cu文件为一个目标文件。生成.obj文件(windows平台)或.o(类Unix平台)文件。
    • --fatbin(-fatbin):编译所有.cu,.ptx和.cubin输入文件为设备端的.fatbin文件。该选项使得nvcc丢弃所有.cu输入文件中的主机侧代码。
    • --cubin(-cubin):编译所有的.cu和.ptx输入文件到设备端的.cubin文件。该选项使得nvcc丢弃所有.cu输入文件中的主机侧代码。
    • --ptx(-ptx):编译所有.cu文件到一个设备端的.ptx文件。该选项使得nvcc丢弃所有.cu文件中的主机侧代码。
    • --preprocess(-E):预处理所有的.c,.cc,.cpp,.cxx和.cu输入文件。默认输出到stdout。
    • --generate-dependencies(-M):生成一个可包含在.c、.cc、.cpp、.cxx和.cu输入文件的Makefile中的依赖文件。默认输出到stdout。
    • --generate-nonsystem-dependencies(-MM):与--generate-dependencies(-M) 一样,但忽略在系统目录找到的头文件。
    • --generate-dependencies-with-compile(-MD):生成依赖文件,并编译输入文件。依赖文件可以在Makefile中包含,并被.c,.cc,.cpp,.cxx和.cu文件包含。
    • --generate-nonsystem-dependencies-with-compile(-MMD): 与--generate-dependencies-with-compile(-MD) 一样,但忽略在系统目录找到的头文件。
    • --run(-run):编译并链接所有输入的文件为可执行文件,并运行。当输入文件就是可执行文件时,不编译或链接,直接运行。

    4.2.3 指定编译器/链接器行为的选项

    4.2.4 传递特定阶段选项的选项

    4.2.5 影响编译器驱动的选项

    4.2.6 指导cuda编译的选项

    4.2.7 指导GPU代码生成的选项

    4.2.8 通用工具选项

    4.2.9 编译阶段控制选项

    关于作者:

    犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。

    专业方向爱好:数学、科学技术应用

    关注犇叔,期望为您带来更多科研领域的知识和产业应用。

    内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路

  • 相关阅读:
    bag包提取深度图和rgb图
    UDS诊断入门
    SQL查询
    C++基础知识(十九)--- 函数对象
    python14 字典类型
    第六章 图论 16 AcWing 1558. 加油站
    【数仓日常踩坑】如何获取binlog数据里每个id的最新数据
    第20章 使用Spring进行事务管理(一)
    QT:绘图
    Android Studio 项目引入ProtoBuf(附序列化与反序列化)
  • 原文地址:https://blog.csdn.net/landy_john/article/details/127974405