【问题标题】:CMake MacOS frameworks not being linked properly?CMake MacOS 框架没有正确链接?
【发布时间】:2020-05-06 20:17:50
【问题描述】:

使用 CLion IDE 和 CMake 用 c++ 和几个 Objective-c++ 类编译我的项目。

我的问题出现了,因为我需要在我的项目中包含 CoreFoundation,以便我的类在 .mm 文件中从 NSObject 继承

经过大量挖掘,我想我找到了将 MacOS 框架(CoreBluetooth、CoreFoundation 等)与 cmake 链接的现代 CMake 方式。

下面的代码是在我的 Cmakelists.txt 文件中查找和链接 MacOS 框架的现代方式:

target_link_libraries(project_name PUBLIC stdc++ "-framework CoreBluetooth"
                                            "-framework Foundation"
                                            "-framework CoreFoundation"
    objc)

加载 cmake 不会引发任何错误,但是当我尝试 import 文件(在我的 .cpp 或 .mm 文件中)时,IDE 说它找不到 CoreBluetooth 和 Foundation 库。

不确定我是否遗漏了任何非常明显的东西。任何帮助将不胜感激!

【问题讨论】:

    标签: c++ cmake clion core-foundation


    【解决方案1】:

    好吧,经过几次野鹅狩猎和层层挖掘,我终于找到了解决方案。我打印了 CoreFoundation 的位置,以确保它被正确找到并且目录是好的:

    find_library(FoundationLib CoreFoundation)
    message("LIB: ${FoundationLib}")
    

    -> /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework 好的,所以我几乎可以肯定正在正确加载。现在我深入挖掘并破坏了我的代码,发现 CLion 接受其他扩展名,例如 .h++ 和 .hm

    .hm 看起来与 .h 非常相似,而且我知道 .m 扩展名表示一个目标 c 文件,所以这一定意味着我应该使用 .hm 来表示一个目标 c 头文件。所以我用 .hm 扩展名重命名了我的标题,它现在可以工作了。我认为这是 CLion 特有的,没有在任何地方记录。

    recap:在 CLion 上将您的目标 c 标头从 .h -> .hm 重命名

    如果您的标头是客观的 c++ 标头,请从 .h -> .hmm 更改

    最终回顾:我将头文件从 .hm 和 .hmm -> .h 改回,它们仍然有效。所以我的问题的最终答案是在 CLion 上,您必须将目标 c++ 标头临时设置为 .hmm 和 .hm,然后将它们设置回 .h

    【讨论】:

    • 我认为包含标题的文件很重要,而不是标题本身。 C++ 文件可以使用 C++ 语法,Objective C 可以使用 Objective C 语法。
    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多