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

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

  •  
  •   Yc1992 · 42 天前 · 1085 次点击
    这是一个创建于 42 天前的主题,其中的信息可能已经有所发展或是发生改变。
    举个例子,我同时需要在 linux 和 macos 上编译一个 c++ 的程序,但是静态库的路径是不一样的。

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

    ELSEIF(UNIX)

    ENDIF
    paoqi2048
        2
    paoqi2048   42 天前
    条件编译
    Hconk
        3
    Hconk   42 天前 via iPhone
    最好是通过 find_package 管理,可以试试 vcpkg
    msg7086
        4
    msg7086   42 天前
    https://cmake.org/cmake/help/latest/command/find_library.html
    https://cmake.org/cmake/help/latest/command/find_package.html
    这两个吗?正常途径安装的应该都能找到的,不需要自己写路径。
    mingl0280
        5
    mingl0280   42 天前 via Android
    if(APPLE)
    else if(UNIX AND NOT APPLE)
    endif()
    Yc1992
        6
    Yc1992   42 天前
    @ulosggs
    @paoqi2048
    @Hconk
    @msg7086
    @mingl0280
    感谢,我去看一下相关的文档
    cuminflea
        7
    cuminflea   42 天前
    如果是 header-only 的 dependency 的话十分推荐 cpm: https://github.com/cpm-cmake/CPM.cmake
    Yc1992
        8
    Yc1992   42 天前
    @cuminflea 依赖挺多的,有.a 和 .dylib 还分 x86 和 arm64 架构
    mingl0280
        9
    mingl0280   41 天前 via Android
    @Hconk
    @Yc1992
    find_package 在他的环境下严重不推荐,因为你不知道他的库到底是哪个环境下的,而 cmake 很有可能自己瞎几把找个不匹配的版本当匹配的版本在编译最后给你甩一脸的链接错误,或者是相似 os 的库链接上了最后执行的时候莫名其妙执行不了报 no such file or directory,我之前被这个坑惨了。
    后来就是一堆 if else 强制规定某个情况下用哪个 lib 就解决了。
    Yc1992
        10
    Yc1992   41 天前
    @mingl0280 明白了 谢谢
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2027 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:35 · PVG 11:35 · LAX 20:35 · JFK 23:35
    ♥ Do have faith in what you're doing.