bytenoob
V2EX  ›  C++

请教 cmake 中如何兼容不同的编译环境

  •  
  •   bytenoob ·
    bufrr · Sep 4, 2021 · 2802 views
    This topic created in 1745 days ago, the information mentioned may be changed or developed.
    举个例子,我同时需要在 linux 和 macos 上编译一个 c++ 的程序,但是静态库的路径是不一样的。

    目前我的做法是在 cmakelists.txt 中同时硬编码两个不同环境的静态库路径,编译的时候注释掉 linux 的库路径来编译 macos 平台的程序这样,但是我觉得应该有更好的办法,不知道谁能告知一下,谢谢
    11 replies    2021-10-20 08:01:51 +08:00
    ulosggs
        1
    ulosggs  
       Sep 4, 2021
    IF(APPLE)

    ELSEIF(UNIX)

    ENDIF
    paoqi2048
        2
    paoqi2048  
       Sep 4, 2021
    条件编译
    Hconk
        3
    Hconk  
       Sep 4, 2021 via iPhone
    最好是通过 find_package 管理,可以试试 vcpkg
    msg7086
        4
    msg7086  
       Sep 4, 2021
    https://cmake.org/cmake/help/latest/command/find_library.html
    https://cmake.org/cmake/help/latest/command/find_package.html
    这两个吗?正常途径安装的应该都能找到的,不需要自己写路径。
    mingl0280
        5
    mingl0280  
       Sep 4, 2021 via Android
    if(APPLE)
    else if(UNIX AND NOT APPLE)
    endif()
    bytenoob
        6
    bytenoob  
    OP
       Sep 4, 2021
    @ulosggs
    @paoqi2048
    @Hconk
    @msg7086
    @mingl0280
    感谢,我去看一下相关的文档
    cuminflea
        7
    cuminflea  
       Sep 4, 2021
    如果是 header-only 的 dependency 的话十分推荐 cpm: https://github.com/cpm-cmake/CPM.cmake
    bytenoob
        8
    bytenoob  
    OP
       Sep 4, 2021
    @cuminflea 依赖挺多的,有.a 和 .dylib 还分 x86 和 arm64 架构
    mingl0280
        9
    mingl0280  
       Sep 5, 2021 via Android
    @Hconk
    @Yc1992
    find_package 在他的环境下严重不推荐,因为你不知道他的库到底是哪个环境下的,而 cmake 很有可能自己瞎几把找个不匹配的版本当匹配的版本在编译最后给你甩一脸的链接错误,或者是相似 os 的库链接上了最后执行的时候莫名其妙执行不了报 no such file or directory,我之前被这个坑惨了。
    后来就是一堆 if else 强制规定某个情况下用哪个 lib 就解决了。
    bytenoob
        10
    bytenoob  
    OP
       Sep 5, 2021
    @mingl0280 明白了 谢谢
    waruqi
        11
    waruqi  
       Oct 20, 2021 via Android
    用 xmake 就行了,一行配置都不用改,默认就是分平台,arch 存储输出文件,互相不冲突

    我 docker 虚拟机 本机 mac 在同一个仓库 开会编译 linux mac win android 程序 完全无干扰 随意切换,增量编译都互不影响,因为 obj 文件啥的 都相互隔离了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   952 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 20:45 · PVG 04:45 · LAX 13:45 · JFK 16:45
    ♥ Do have faith in what you're doing.