V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sbldehanhan
V2EX  ›  C++

想请教一下各位大佬,你们的 C/C++ Linux 开发环境是什么样的?

  •  
  •   sbldehanhan · 2023-06-27 09:21:56 +08:00 · 8743 次点击
    这是一个创建于 513 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用的操作系统是啥?用 IDE 吗? 本地编译还是服务器上编译?服务器上编译用什么工具连接?

    84 条回复    2023-07-07 23:20:12 +08:00
    weidaizi
        1
    weidaizi  
       2023-06-27 09:29:28 +08:00
    archlinux, vim/nvim, 都有, (没看懂, 要表达链接?还是工具链?还是用什么登录服务器?)
    x1596357
        2
    x1596357  
       2023-06-27 09:32:44 +08:00
    Ubuntu, Qt Creator, 本地编译,CI 服务器编译。GCC and Make 。
    yolee599
        3
    yolee599  
       2023-06-27 09:35:59 +08:00
    操作系统:目前用 ArchLinux
    IDE:没用 IDE ,只用了文本编辑器
    编译环境:小工程就在本地编译,大工程(比如 linux kernel ,android )用公司的服务器编译
    工具链:写一些 pc 端小工具用自带的 gcc ,嵌入式 arm linux 一般是用 arm-linux-gnueabihf
    angryPHP
        4
    angryPHP  
       2023-06-27 09:36:05 +08:00
    clion + Linux 虚拟机
    kaedeair
        5
    kaedeair  
       2023-06-27 09:36:47 +08:00
    Fedora ,Qt Creator/CLion,本地编译,编译器用 GCC ,构建工具用 cmake 和 ninja
    c2const
        6
    c2const  
       2023-06-27 09:39:43 +08:00
    准备两台电脑,一台 windows ,一台 linux. :)
    sbldehanhan
        7
    sbldehanhan  
    OP
       2023-06-27 09:47:14 +08:00
    @yolee599 用公司服务器编译是怎么操作?把文件传上去,然后 ssh 去 make 吗?有没有更舒服的方式?
    sbldehanhan
        8
    sbldehanhan  
    OP
       2023-06-27 09:49:08 +08:00
    @angryPHP clion 真的很好用。是把编译运行工具配成虚拟机吗?
    sbldehanhan
        9
    sbldehanhan  
    OP
       2023-06-27 09:53:45 +08:00
    @weidaizi 就是编辑、调试都在自己手里的一台电脑上。还是在远程服务器上?工程大了,需要的软件包和工具比较多。把这些都配置在自己的电脑上,感觉吃不消。
    changnet
        10
    changnet  
       2023-06-27 09:55:08 +08:00
    @sbldehanhan 服务器不都是把代码 check 下来直接 cmake 或者 make 吗?又不需要在上面写代码,为啥要编辑器?我们的服务器连桌面都不装的
    sbldehanhan
        11
    sbldehanhan  
    OP
       2023-06-27 09:58:39 +08:00
    @changnet 那你的所有编译、运行环境都在本地?服务器只是存代码的,相当于 github 或者其他文件服务器?
    duke807
        12
    duke807  
       2023-06-27 10:00:23 +08:00 via Android
    gentoo
    eclipse 纯编辑
    make 命令编译
    服务器和本机没区别
    Noicdi
        13
    Noicdi  
       2023-06-27 10:00:58 +08:00 via iPhone
    自用的是 windows11+wsl2 ,wsl2 安装 arch Linux ,windows 上通过 vscode 链接到 wsl ,源码全部在 wsl 上,clangd 结合编译数据库
    dreasky
        14
    dreasky  
       2023-06-27 10:03:50 +08:00
    大佬都是记事本手搓操作系统代码的 要啥开发环境
    bfdh
        15
    bfdh  
       2023-06-27 10:05:54 +08:00   ❤️ 1
    ubuntu + gcc + sourceinsight
    hokori
        16
    hokori  
       2023-06-27 10:08:32 +08:00
    有服务器,不写界面。 那直接 vsc remote 开发不就好了吗 完全不受平台闲置 mac win linux 都可以快速进入开发模式
    hankai17
        17
    hankai17  
       2023-06-27 10:11:35 +08:00
    linux 环境 + vim
    不用 IDE 代码看得时间长了很熟 知道函数在哪个位置
    fkl123
        18
    fkl123  
       2023-06-27 10:11:43 +08:00
    Windows11 + Docker ( WSL2 Backend ),源码放在 volume 里,公司提供了一个编译环境的 Docker 镜像,load 到本地,启动一个容器,挂载源码 volume ,用 VSCode 连接到容器环境进行开发和编译。
    silkriver
        19
    silkriver  
       2023-06-27 10:21:05 +08:00
    推荐 cern root 带有 c++ 解释器还能用于 jupyter
    jmc891205
        20
    jmc891205  
       2023-06-27 10:30:22 +08:00
    我们工程太大 单机编译太慢
    只能在服务器上搞分布式编译
    bruce0
        21
    bruce0  
       2023-06-27 10:48:59 +08:00
    win10 + VM + debian12 + clion + GCC/clang
    yolee599
        22
    yolee599  
       2023-06-27 10:54:49 +08:00
    @sbldehanhan #7 对,ssh 上去,公司服务器配置比较高,编译大工程比较快
    sanjay2023
        23
    sanjay2023  
       2023-06-27 11:01:25 +08:00
    centos + nvim coc + cmake, 本地 mac iterm 连 centos
    Hengtang
        24
    Hengtang  
       2023-06-27 11:05:51 +08:00   ❤️ 4
    所有流程基本都在 VSCode 里完成。
    1 、开发环境:嵌入式 linux 设计到各种芯片的 SDK ,对操作系统版本也有要求,所以每种芯片搭建一个 Docker 开发环境,根据 SDK 要求使用不同版本的 Linux 镜像作为底层容器,SDK 和自己的工程路径放到宿主机上并挂载进开发容器。宿主机为一台 Ubuntu Server 的开发用服务器。
    2 、本地开发环境:操作系统 Deepin 20.9 ,选 linux 作开发机是因为会大量使用 Docker 和 shell 工具,在 linux 下体验会好很多。选 Deepin 的原因是微信和 QQ 之类软件目前还是必须要用,用 Deepin 会少很多问题,装个 Wine 运行器的话很多 Windows 小工具也能双击直接运行。
    3 、编辑、编译、部署工具:VSCode 。VSC 可以远程连接开发用服务器上的 Docker 开发环境,局域网环境下体验跟本地开发基本一致。编译、部署等在开发阶段直接通过自己编写的 VSCode 的 task.json 脚本化运行,在 VSCode 内直接快捷键调用。
    4 、远程调试:VSCode 。VSCode 的 task.json 里可以添加通过 SSH 远程运行 shell 指令来启动远程目标设备上的 GDB Server ,在 launch.json 中定义好远程目标设备的 IP 和 GDB server 端口等信息后就能直接在 VSC 中 F5 进行远程调试。
    5 、CI/CD:Drone + Gitea 。VSCode 有 Drone 插件可以一键构建部署等。
    jackmod
        25
    jackmod  
       2023-06-27 11:08:53 +08:00
    个人项目在 devcontainer 里起步,github 代为 CI
    用了 docker 之后系统就尽量不装开发环境了
    Yuan2One
        26
    Yuan2One  
       2023-06-27 11:09:55 +08:00
    Windows clion+linux 服务器
    直接在 clion 里配置好远程服务器,然后就可以同步代码,构建,debug 等操作了,也可以在服务器上启 docker 然后操作
    很舒服的点在于 linux 服务器不需要配置什么东西,然后 clion 相当于一个代码的图形界面
    L4Linux
        27
    L4Linux  
       2023-06-27 11:11:20 +08:00
    Emacs + Eglot + Clangd
    Jirajine
        28
    Jirajine  
       2023-06-27 11:11:32 +08:00
    Archlinux + vscodium + clangd +lldb
    一般本地调试为主,也可以通过 ssh 远程调试。
    yidadaa
        29
    yidadaa  
       2023-06-27 11:12:20 +08:00
    大型项目(本地 MacBook 要编译 20 分钟以上的项目都算,无论什么原因导致的)只能在开发机专用服务器上开发,几百个核拉满,只在本地开发基本干不了活,索引都建不起来。

    CLion 基本对于这种项目无能为力,JB 的远程开发体验就是一坨,团队内使用统一的 VSCode 配置,使用 VSCode Remote 开发,我自己用 NeoVim + coc 插件开发。
    loken2020
        30
    loken2020  
       2023-06-27 11:26:24 +08:00
    做 C/C++ 开发,最好可以熟悉各种编译开发环境,例如 msys2 ,vs2019 ,clion 等等。
    mingl0280
        31
    mingl0280  
       2023-06-27 11:34:59 +08:00 via Android
    Win10+Visual Studio/VSCode+CMake+WSL1+远程物理机
    我们那代码要“看熟了还记得住位置”得啥都不干光背几年的,调试不上 VS 或者 VSC 在 linux 上简直是灾难——虽然我自己用 gdb 用得飞起但是这种能力没法推广给全组啊
    exch4nge
        32
    exch4nge  
       2023-06-27 11:46:23 +08:00
    本机 mac ,用 vscode remote ssh 连上 centos 7 开发机,编译用 gcc / clang ,构建用类似 bazel 的,分布式编译,有缓存。vscode 上主要用 clangd 插件。
    weeei
        33
    weeei  
       2023-06-27 12:39:55 +08:00
    搭车问一下,在 Linux 上选 clang 而不是 gcc 做开发的话,会有什么坑吗?
    yangxin0
        34
    yangxin0  
       2023-06-27 12:40:33 +08:00
    公司:Mac + Ubuntu 服务器
    家里:PC + WSL2
    weeei
        35
    weeei  
       2023-06-27 12:40:57 +08:00
    主要是看上 clang 可以使用 block 这个语言扩展。
    foxtalk
        36
    foxtalk  
       2023-06-27 12:49:25 +08:00
    开发机:linux mint
    代码编辑:mac ,vscode ssh 连接到 linux mint 编辑代码,编译都是在 linux mint 上
    zhuangzijun1996
        37
    zhuangzijun1996  
       2023-06-27 12:53:03 +08:00 via Android
    vscode devcontainer 要啥交叉编译工具就下啥 一个 Makefile 全搞定 做 ci/cd 也方便
    mybyons
        38
    mybyons  
       2023-06-27 13:17:37 +08:00
    其实这个问题可以借鉴大厂的开发环境配置(Google, FB...)

    Google C++ 团队用 bazel 统一管理, 各位提到的痛点基本都能解决,(大型项目用 bazel cache 加速...)...

    个人项目也在转向了 bazel, 编译器版本管理,打包,发布 都非常的优雅

    缺点就是需要自己花费几天的时间熟悉 bazel 个人还是非常推荐
    sbldehanhan
        39
    sbldehanhan  
    OP
       2023-06-27 14:02:05 +08:00
    @yolee599 那怎么调试呢?用 gdb ?
    cnbatch
        40
    cnbatch  
       2023-06-27 14:05:51 +08:00   ❤️ 1
    我不是大佬,所以不做纯 Linux 编程,只能做点跨平台小应用顺便兼容 Linux 的程序。
    (尤其是公司内只做 Windows 开发,完全不符合 OP 提问,因此就不谈了)

    于是我日常 Windows + Visual Studio + git 管理代码,Visual Studio 写好了测试完了再去 posix 系统做编译+测试。
    顺序是:
    Windows → FreeBSD → Linux
    通常在 FreeBSD 测试完了,Linux 基本上都能过,偶然有些小问题的时候再针对性地改。

    Windows + Visual Studio 时,自然是 sln 文件管理一切。然后是 CMakeLists.txt ,在 POSIX 系统编译时会用到。
    因此在 POSIX 平台是用 cmake + git + 代码编辑器(如 VSCode )。

    为什么先测 FreeBSD 再去 Linux ?
    1 、我本身就用着 FreeBSD 及其衍生系统,那肯定要照顾到
    2 、FreeBSD 同样也是 POSIX 系统
    3 、BSD 全系列自带编译器和调试器工具链,不需要单独安装
    4 、Linux 发行版过多,glibc 的版本号也是,我怕某个发行版测试完成后,换成另一个 Linux 发行版又出问题,然后还不知道到底是我的问题、还是第三方库的问题、或是 glibc 的问题、甚至是不是发行版的问题

    至于非 Windows 平台的 debug ,我个人是手动使用 LLDB ,尽管不怎么熟练。GDB 用得比较少,因为大多数 POSIX 环境 bug 都在 FreeBSD 测试时解决完了。

    真要在 Linux 测试的话,通常以 Debian 虚拟机为先。当然了,其它系统比如 Fedora, Alpine 在有必要的时候也会测一测。

    而且我发现跨平台应用的终极 debug 方式,是输出一堆 Log ,然后再从故障位置根据 Log 内容往回排查。
    其次是挂着调试器让它运行到故障位置,这个普通常规调试方式,大家都用过,经验比我还丰富。

    没办法,因为我不是大佬。
    tingyunsay
        41
    tingyunsay  
       2023-06-27 14:14:46 +08:00
    vim 自己装点插件
    clemente0731
        42
    clemente0731  
       2023-06-27 14:52:06 +08:00
    vscode+clang+各种插件+remote 到服务器
    daveh
        43
    daveh  
       2023-06-27 14:58:36 +08:00 via iPhone
    @yidadaa #29 怎么会跑不起来呢? clion 加点运行内存就行了,大型项目一样跑。索引只是打开工程时建一次,而且首次索引是粗略索引,详细索引是打开文件后按需做的。
    hhjuteman
        44
    hhjuteman  
       2023-06-27 16:48:31 +08:00
    clion + docker
    promontory123
        45
    promontory123  
       2023-06-27 17:23:54 +08:00
    vscode remote ssh 连接 Linux 服务器,编译 Cmake
    buffzty
        46
    buffzty  
       2023-06-27 17:24:31 +08:00
    windows + clion ( run on remote ubuntu ), c 环境用来 conan 配置,一般使用 gcc 10.
    这应该是最佳方案了,linux 桌面 bug 真的多,而且很多 bug 都是没有解决方案的
    elechi
        47
    elechi  
       2023-06-27 17:34:56 +08:00
    vscode remote, gcc, gdb, xmake, cmake
    786375312123
        48
    786375312123  
       2023-06-27 17:35:47 +08:00
    以前用 visual studio ,后来用了段时间 clion ,现在就 vscode+插件,真好用
    hsfzxjy
        49
    hsfzxjy  
       2023-06-27 17:41:30 +08:00 via Android
    直接在 ubuntu 用 vscode
    tool2d
        50
    tool2d  
       2023-06-27 17:42:01 +08:00
    我用 unreal 的跨平台方案 ( https://docs.unrealengine.com/4.27/en-US/SharingAndReleasing/Linux/GettingStarted/)

    也就是 windows 开发,然后调用 unreal 的交叉编译工具。

    调试无所谓,一般 log 能解决 95%的问题。实在不行,最后再上 gdb remote ,这种情况很少。
    LXGMAX
        51
    LXGMAX  
       2023-06-27 17:52:28 +08:00
    vim + gnu gcc g++一把梭哈
    99999999999
        52
    99999999999  
       2023-06-27 17:54:58 +08:00
    clion + vcpkg + linux 虚拟机

    本来用的 vs ,但是 vcpkg 总是出问题,换了 clion 舒服了
    tu9oh0st
        53
    tu9oh0st  
       2023-06-27 17:56:36 +08:00
    clion + Linux 虚拟机
    tairan2006
        54
    tairan2006  
       2023-06-27 18:14:12 +08:00
    clion + wsl
    xylxAdai
        55
    xylxAdai  
       2023-06-27 20:21:08 +08:00
    客户端开发。clion 、macos 、cmake 或者 ninja 本地编译、服务端编译一般就 ssh 上去或者走流水线 UI ,然后下载产物就好。
    orange
        56
    orange  
       2023-06-27 20:23:40 +08:00
    vscode+ccls
    Inn0Vat10n
        57
    Inn0Vat10n  
       2023-06-27 20:36:44 +08:00
    现在的 vscode remote 几乎可以做到远程开发 /编译和本地一样丝滑
    FatSheep2020
        58
    FatSheep2020  
       2023-06-27 21:06:30 +08:00
    操作系统:Archlinux
    IDE:CLion / VS Code + Cpp plugins
    本地编译,用 cmake 组织工程
    0o0O0o0O0o
        59
    0o0O0o0O0o  
       2023-06-27 21:15:18 +08:00 via iPhone
    vscode devcontainer
    tyzandhr
        60
    tyzandhr  
       2023-06-27 21:18:22 +08:00
    Windows VS ,Mac Clion 。跨平台项目链接库确实很麻烦,all in cmake&vcpkg 。
    lishoujun
        61
    lishoujun  
       2023-06-27 23:38:51 +08:00
    之前在某互联网公司的时候,我的研发:
    vim 编码 bcloud 编译
    closedevice
        62
    closedevice  
       2023-06-28 00:00:49 +08:00
    @yidadaa neovim 可以配置远程开发?求教
    archxm
        63
    archxm  
       2023-06-28 00:06:30 +08:00
    在 win10 下弄,vscode ,安装 c++插件。
    安装 mingw64. 把其所带的头文件夹删掉。
    把 linux 各种头文件拷贝过来。
    设置 c_cpp_properties.json ,弄强包含头文件,定义一些 linux 的特定宏,取消一些 windows 相关宏。
    这样写代码时,就有相应的错误提示了。
    写好代码,传到 linux 上,编译,gdb 调试。
    archxm
        64
    archxm  
       2023-06-28 00:06:46 +08:00
    #undef _WIN32
    #undef __WIN32__
    #undef _MSDOS
    #undef _WIN64
    #undef __MINGW32__
    #undef _MSC_VER
    #undef __i386__
    #undef __GNUG__

    #define _GNU_SOURCE
    #define __linux__
    #define __GNUC__ 4
    //#define __GNUG__ 4
    #define __WORDSIZE 64
    #define __x86_64__
    XxxxD
        65
    XxxxD  
       2023-06-28 00:08:31 +08:00
    今天装好了 Arch linux, 我要说,arch is the best!!
    应该是下个 sublime 就做一些简单的项目酱紫
    ivvei
        66
    ivvei  
       2023-06-28 00:21:27 +08:00
    Archlinux + nvim + clangd + gcc
    ivvei
        67
    ivvei  
       2023-06-28 00:21:27 +08:00
    Archlinux + nvim + clangd + gcc
    yzbythesea
        68
    yzbythesea  
       2023-06-28 06:36:44 +08:00 via iPhone
    Ubuntu, Clion, Bazel
    chaoschick
        69
    chaoschick  
       2023-06-28 07:51:35 +08:00 via Android
    fedora gcc
    dayeye2006199
        70
    dayeye2006199  
       2023-06-28 08:09:14 +08:00
    ubuntu + neovim + cmake
    litguy
        71
    litguy  
       2023-06-28 08:28:38 +08:00
    笔记本跑 windows ,用 vscode remote
    NUC 上面跑 linux
    linux 下面就是标准的 GNU 套件
    我们属于一个项目干 5 年的
    ssh remote 打开工程写代码就行了
    linux 也只是跑单元测试
    剩下的功能测试要丢服务器上面去
    NUC 只有 32GB 内存,8 代 i7
    测试的服务器都是 384/512GB 的,64 核
    staycoolsun77
        72
    staycoolsun77  
       2023-06-28 09:05:22 +08:00
    @sbldehanhan vscode remote 远程连接服务器,可以直接在本地 vscode 上修改服务器上的代码,修改完 make 一下就好
    zvl0reqglvd
        73
    zvl0reqglvd  
       2023-06-28 09:54:07 +08:00
    archlinux+sway+zsh+tmux+nvim+firefox+obsidian
    shayebushi
        74
    shayebushi  
       2023-06-28 14:50:35 +08:00
    万物基于 vim
    yidadaa
        75
    yidadaa  
       2023-06-28 16:15:43 +08:00
    @daveh 当然可以建索引,但是建索引之前你得先编译一遍项目吧?编译一次 20 分钟,后面随便改点什么头文件,又得重新编译,一天下来净等编译了,还干不干活了。
    yidadaa
        76
    yidadaa  
       2023-06-28 16:16:15 +08:00
    @closedevice 直接 ssh 到服务器上,在服务器上配置好 neovim 开发。
    bugmaker233
        77
    bugmaker233  
       2023-06-28 17:25:54 +08:00
    @yidadaa 好奇有多大?比 Linux kernal 还大?
    daveh
        78
    daveh  
       2023-06-28 18:42:16 +08:00 via iPhone
    @yidadaa #75 你们这用法不对,建索引并不需要先编译。
    你们用的 CMake 还是 Makefile 或者其他构建工具?如果是 CMake 最好了,打开项目配置好工具链和依赖,建的索引就准确了,并不需要去编译;如果是 Makefile 也一样,加载后索引自动建立准确索引;其他构建工具,只要能输出编译数据库,也能加载建立准确索引。
    CLion 加载的 CMake 、Makefile 工程,直接就能增量编译,改什么编译什么,不需要全量编译 20 分钟,怎么会一直等编译?其他构建工具,也可以自定义构建命令,只要你命令行能增量编译,CLion 中也能。
    话说回来,你用其他编辑器 IDE ,难道改了代码能节省编译时间?而 CLion 中代码修改后,符号索引什么的都是自动刷新的。
    yidadaa
        79
    yidadaa  
       2023-06-29 11:25:22 +08:00
    @daveh #78 看来你不太清楚这些 IDE 是怎么建索引的。上世代 vim 依赖 ctags 建立符号索引,非常不准确;本世代 IDE (包括各种集成 lsp 的编辑器)都依赖编译器生成的 compile_commands.json 来建立符号索引,这种索引是由编译器在编译项目期间收集的符号信息,非常准确,当然有一些静态分析工具可以使用其他方法建索引,但现在主流的 IDE 基本都是依赖 compile_commands.json ,这个文件必须要完整编译一遍整个项目才能生成,也就是你说的“编译数据库”。

    其次,你把增量编译想得太好了,如果具体项目中没有做过依赖治理,各个文件之间的依赖基本就是一坨,尤其是改动头文件之后,所有依赖这个头文件的下游文件(.h / .cpp )都需要重新编译。

    最后,我的第一条回复不是在说 Clion 之外的 IDE 能节省编译时间的问题,而是大型 CPP 项目基本不可能在本机编译,只能靠专门的高性能开发机来编译,这就需要 IDE 的远程开发体验必须得好,目前远程开发这块,Clion 基本没法和 VSCode 比。
    yidadaa
        80
    yidadaa  
       2023-06-29 11:27:33 +08:00
    @bugmaker233 Linux Kernel 里面都是 C 啊,C 编译起来比 CPP 不知道快到哪里去了,CPP 里稍微玩点宏、模板,引点什么标准库,编译时间就起飞了。
    daveh
        81
    daveh  
       2023-06-29 13:29:08 +08:00 via iPhone
    @yidadaa #79 我也按照你这个次序来回吧。

    看来你真是不太清楚现代 IDE 是怎么建索引的。
    我看你说还在用 NeoVim ,那确实与现代 IDE 技术脱节太久,不太清楚现代 IDE 的能力——我说的现代 IDE 指 JB 系的 CLion 、MS 的 VC++不是那个李鬼 VS Code 、Apple 的 Xcode 等等。
    我问你们用什么构建工具没得到答复,那先假设是 Makefile ,因为如果你们用 CMake/Meson 之类的,就应该知道不需要编译就能生成编译数据库 compile_commands.json ,CMake 配置时加个选项就能生成,确实,目前用 Makefile 生成 compile_commands.json 要用三方工具外挂跑一遍编译,但是,你有没有想过,获取这么困难,为什么还需要这个东东? IDE 为什么要这个东东?主流 IDE 比如 CLion 、VC++等其实都不用 compile_commands.json ,你说的其实是编辑器挂 LSP 的才需要,主流 IDE 有自己的方式快速建索引,等你提供 compile_commands.json 黄花菜都凉了,这也是 IDE 与编辑器的区别,IDE 会尽量做好各种细节体验,接触一下现代 IDE 可以改变你的老看法。
    回到前面说的,CLion 不需要编译数据库,你是 Makefile 直接加载就行,IDE 会自动采集你的编译信息,并进行索引,不需要编译、不需要编译、不需要编译——重点的事情说三次。如果非 Makefile 非 CMake 等,那确实可能要先编译一遍才能采集 compile_commands.json ,但 clangd 建索引时也不用编译。这块还是建议你们切换构建工具,提高开发效率。

    其次,增量编译是构建工具的能力,你只要分了模块,写不同的构建目标,就天然有编译依赖,如果用 CMake 和 Makefile ,CLion 收集构建工具的信息后,自动会生成构建依赖及目标,这就是增量构建的基础,你选择构目标,就能增量编译指定模块目标,不需要你手工做什么处理。

    最后,大型 CPP 项目如果不想本机编译,有很多方法,用 CLion 远程工具链、或者跑 Gateway 、跑远程 IDE 、远程桌面等,有很多种方式,体验也非常好,看个人偏好。最重要的是,你们不再有那种加几个文件,就得去全量构建一次生成 compile_commands.json ,之后编辑器里面代码才能索引,才能继续去开发编译的体验了。CLion 这体验完爆 VS Code 什么的,当然你们得会用才行,怀念 vim 可以装个 IdeaVim 插件。
    yidadaa
        82
    yidadaa  
       2023-06-30 11:37:58 +08:00
    @daveh #81

    我们用的构建工具是 ninja + cmake 。

    我的确不清楚 CLion 这些 IDE 具体使用了什么技术构建的符号索引,CLion 相对于 lsp 建立索引的速度确实算快的,VS 和 Xcode 我用得不多,不做多评价。

    我要重申一遍我的第一条回复的核心思想,免得我们的争论跑偏:
    - 我主张:无论用什么索引技术,在本机开发大型 CPP 项目都很痛苦,我当然知道你说的这些加快构建时间以及最大化利用增量编译的能力,但这些能力的提升总归会受限于 CPU 机能,项目的内在复杂度会一直堆砌,尤其在 CPP 缺少标准反射能力的当下,很多功能都依赖大量模板和宏编程,这些都会极大地拖慢编译时间,项目增长到一定规模之后,无论再怎么做编译优化,本地编译时间都会不可避免地膨胀到无法忍受的地步;
    - 我主张:CLion 的远程开发体验就是垃圾,你说的那些所谓的“CLion 远程工具链、Gateway 、远程 IDE 、远程桌面”我们都用过,我可以毫不吝啬地再说一遍 CLion 远程开发体验就是垃圾,尽管我们团队都喜欢 CLion ,现在都不得不迁移到了 VSCode 。我不是固守某一种编辑器的原教旨主义者,在完全迁移到 NeoVIM 之前,我用了相当长时间的 CLion 和 VSCode ,而且团队其他成员使用它们的时间更长,这不是一种臆想,这是一种实证;
    - 我申明:compile_commands.json 除了首次生成需要重新编译,后续的符号索引更新都很快,但这一切在羸弱的本机上都会变得十分痛苦。

    总结:我不想评价哪种 IDE 或者编辑器更好,它们各有各的好,但仅针对大型项目的开发体验而言,VSCode/NeoVIM + 远程开发机的配置是目前最优解,而且如果考虑到调试体验,VSCode 吊打 NeoVIM 。
    sjkdsfkkfd
        83
    sjkdsfkkfd  
       2023-07-06 15:23:37 +08:00
    ubutnu, clion ,本地 docker 编译,docker 里面 gcc 7.5 + cmake 3.24 + ccache + gold, vscode remote 写点 python 脚本.

    如果项目变得很大,我倾向于用 distcc 远程集群编译,然后本地用 gold 链接。仍然用 clion 本地写代码,有可能的情况下我拒绝远程开发
    rungex
        84
    rungex  
       2023-07-07 23:20:12 +08:00
    archlinux, clion/neovim. 实验特性会用 clang-git & gcc-git, 补全、跳转、索引、分析都基于 clangd ( clion 也利用 clangd )。如果写 stable 的代码这些都没问题。但如果写实验代码坑就非常之多……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:07 · PVG 03:07 · LAX 11:07 · JFK 14:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.