V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Elaina
V2EX  ›  程序员

MacOS 下的 Apple clang 关于 pthread 库的问题

  •  
  •   Elaina · 317 天前 · 1685 次点击
    这是一个创建于 317 天前的主题,其中的信息可能已经有所发展或是发生改变。
    cmake_minimum_required(VERSION 3.22)
    project(playground CXX)
    
    set(CMAKE_CXX_STANDARD 11)
    
    find_package(Threads REQUIRED)
    set(THREADS_PREFER_PTHREAD_FLAG ON)
    
    message(STATUS "CMAKE_THREAD_LIBS_INIT: ${CMAKE_THREAD_LIBS_INIT}")
    add_executable(playground main.cpp)
    target_link_libraries(playground ${CMAKE_THREAD_LIBS_INIT})
    

    这段 cmakelists.txt 在 ubuntu 系统下的 gcc 上正常运行,在 MacOS 的 ARM 架构下的 AppleClang 下${CMAKE_THREAD_LIBS_INIT}$读到的是空的,这个是有什么坑吗?求指点。

    7 条回复    2024-02-15 22:22:42 +08:00
    stimw
        1
    stimw  
       317 天前
    不要用 apple clang ,坑一堆,遇到过正则的问题
    brew 另外下个 llvm
    Elaina
        2
    Elaina  
    OP
       317 天前
    @stimw 用 homebrew 下了个 gcc ,然而这玩意儿 gcc 的默认重定向还是 apple clang ,还得自己手动指派一下,给我整乐了😂,这玩意儿真拉啊,一个基本的 thread 都支持不好
    beyondstars
        3
    beyondstars  
       317 天前
    我一般会单独起一个虚拟机,然后让 CLion 连接虚拟机进行开发。
    lcdtyph
        4
    lcdtyph  
       317 天前 via iPhone
    CMAKE_THREAD_LIBS_INIT
    The thread library to use. This may be empty if the thread functions are provided by the system libraries and no special flags are needed to use them.

    这个 flag 本来就可以是空的,当编译器不需要加 -pthread 的时候
    Elaina
        5
    Elaina  
    OP
       317 天前
    @lcdtyph 那这样的话,有什么更好的跨平台写法吗😂
    lcdtyph
        6
    lcdtyph  
       317 天前 via iPhone   ❤️ 1
    @Elaina
    把 prefer pthread 放在 find_package 之前
    然后直接 target link threads::Threads 就行了
    fly2never
        7
    fly2never  
       316 天前
    如果是 cpp 的话,我直接 std::thread 够用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2811 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:06 · PVG 15:06 · LAX 23:06 · JFK 02:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.