【发布时间】:2014-01-07 02:23:56
【问题描述】:
我正在使用 Objective-C 和 CMake 在 OSX 上简单地创建一个 hello world 可执行文件。我都是新手,所以我会很感激任何建议。我了解 CMake 本身并不支持构建 Objective-C。您必须先添加
set(CMAKE_C_FLAGS "-x objective-c")
或
set(CMAKE_CXX_FLAGS "-x objective-c++")
甚至可以创建 Makefile。我陷入困境的部分是如何适当地链接现有框架。我已经按照这篇文章中的说明以及它所基于的教程进行操作:Can't link MacOS frameworks with CMake 我还尝试将库与:
set(CMAKE_EXE_LINKER_FLAGS "-framework fm1-framework fm2…")
我现在可以获得一个成功的 CMake 生成的 Xcode 项目,但是当我打开该项目时,我在 CMakeLists.txt 文件中指定的所有框架都不在“resources”文件夹中。使用这个 Xcode 项目,我可以编译项目,但是当我运行可执行文件时,我得到了错误:
"2014-01-06 18:02:35.859 HelloWorld[62641:303] 应用程序包中没有 Info.plist 文件或 Info.plist 文件中没有 NSPrincipalClass,退出 程序以退出代码结束:1"
我还尝试在终端中手动运行由 CMake 制作的 makefile,并收到很多警告(在链接期间)都说:
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:3:2252:警告:空字符 忽略 [-Wnull-character] ...
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:3:2263:警告:空字符 忽略 [-Wnull-character] ...
还有 7 个错误(链接期间):
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:1:1:错误:预期的不合格 ID
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:3:90:错误:预期的不合格 ID ...HuHU]fffff.
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:3:121:错误:多余的右括号 ('}') ...}HuHuH=
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:3:122:错误:预期的不合格 ID ...HuHuH=
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:3:169:错误:多余的右括号 ('}') ...}HuHUHuH=
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:3:170:错误:预期的不合格 ID ...HuHUHuH=
CMakeFiles/HelloWorld.dir/AppDelegate.m.o:3:2246:错误:预期的不合格 ID ...16@0:8
对我的错误有什么想法吗?我花了一天的大部分时间寻找答案,我引用的帖子有最有用的信息,但它仍然没有解决我的问题。是不是因为原来的程序也是用Xcode写的?不知何故,这搞砸了 CMake?
这是我的 HelloWorld 应用程序的代码:
#import <Cocoa/Cocoa.h>
int main(int argc, const char * argv[])
{
return NSApplicationMain(argc, argv);
}
以及 CMakeLists.txt 文件的代码:
cmake_minimum_required(VERSION 2.8)
project(HelloWorld)
set(src_files
AppDelegate.h
AppDelegate.m
main.m
)
set(CMAKE_C_FLAGS "-x objective-c")
set(CMAKE_CXX_FLAGS "-x objective-c++")
set(CMAKE_EXE_LINKER_FLAGS "-framework Cocoa -framework AppKit -framework CoreData - framework Foundation")
add_executable(HelloWorld
${src_files}
)
提前致谢!
【问题讨论】:
-
无需修改
CMAKE_CXX_FLAGS即可正常工作。如果删除-x objective-c++会怎样? -
如果我删除 -x objective-c++ 仍然得到相同的结果
-
但我确实认为我已经取得了一些进展,看来问题在于链接 Cocoa 框架。如果我只打开一个常规的目标 c Xcode 项目作为命令行可执行文件而不是 Cocoa 项目,我可以让 CMake 正常工作。如果这可能特定于 CMake 2.8-11 或 Xcode 5.0.2 版本,有什么想法吗?
-
If I open just a regular objective c Xcode project as a command line executable instead of a Cocoa project, I can get CMake to work just fine我不明白你的意思...
标签: objective-c xcode cmake