CMake MacOS框架不能正确链接?

问题描述 投票:0回答:1

使用CLion IDE和CMake编译我的项目,其中包括c++和几个客观的c++类。

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

经过反复研究,我想我找到了现代CMake与cmake链接MacOS框架(CoreBluetooth,CoreFoundation等)的方法。

下面的代码是在我的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个回答
0
投票

好吧,在经历了数次的狂轰滥炸和层层挖掘之后,我终于找到了一个解决方案。我把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特有的,在任何地方都没有被记录下来。

总结:在 CLion 上,将你的 objective c 头文件从 .h -> .hm 重命名。

如果你的头是 objective c++ 头,从 .h -> .hmm 改为 .h -> .hmm。

最后总结:我把头文件从.hm和.hmm -> .h改回来了,它们仍然可以工作。所以我的问题的最终答案是,在CLion上,你必须将客观的c++头文件暂时设置为.hm和.hmm,然后再将它们设置为.h。

© www.soinside.com 2019 - 2024. All rights reserved.