Objective-C에서 소스 파일의 확장자들 간략 개념
요즘 cocos2d-x로 Game Center작업중에 선 정리가 필요해 보여서 이것부터 리서치하고 정리를 하고있네요.
먼저 h파일은 c++과 같게 .h로 동일합니다. 하지만 소스파일이 다른데요, .m(.c에 대응)과 .mm(.cpp에 대응)두가지가 존재합니다. 이렇게 된 이유는 단지 .o와 .c가 C에 의해 이미 사용되고 있었기 때문이라는 군요. 물론 .c, .cpp도 사용가능합니다.
m : Objective-C 구현 파일
mm : Objective-C, C++ 혼용 가능 파일
뭐 이렇다네요. mm으로된 녀석은 Objective-C 문법과 C++문법 둘다 있어도 된다는 거죠. 실제로도 cocos2d-x의 몇몇 mm파일들이 그러합니다.
간단하게 cocos2d-x의 ios helloworld 소스를 살펴보면,
AppController.mm 파일 내용중 일부입니다. 다 Objective-C문법을 쓰다가 마지막에 run()부분은 c++이죠. 이렇게 혼용이 가능한게 .mm인거죠. 이러한 일들은 Xcode 내부에서 자동적으로 확장자에 맞는 컴파일러를 선택해 컴파일을 한다고 합니다.
cpp class에 NSString* 변수를 멤버로 가지고 있으면서 사용도 가능하다고 하네요.
참고 : 위키
먼저 h파일은 c++과 같게 .h로 동일합니다. 하지만 소스파일이 다른데요, .m(.c에 대응)과 .mm(.cpp에 대응)두가지가 존재합니다. 이렇게 된 이유는 단지 .o와 .c가 C에 의해 이미 사용되고 있었기 때문이라는 군요. 물론 .c, .cpp도 사용가능합니다.
m : Objective-C 구현 파일
mm : Objective-C, C++ 혼용 가능 파일
뭐 이렇다네요. mm으로된 녀석은 Objective-C 문법과 C++문법 둘다 있어도 된다는 거죠. 실제로도 cocos2d-x의 몇몇 mm파일들이 그러합니다.
간단하게 cocos2d-x의 ios helloworld 소스를 살펴보면,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Add the view controller's view to the window and display. window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; EAGLView *__glView = [EAGLView viewWithFrame: [window bounds] pixelFormat: kEAGLColorFormatRGBA8 depthFormat: GL_DEPTH_COMPONENT16 preserveBackbuffer: NO sharegroup:nil multiSampling:NO numberOfSamples:0]; // Use RootViewController manage EAGLView viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil]; viewController.wantsFullScreenLayout = YES; viewController.view = __glView; // Set RootViewController to window [window addSubview: viewController.view]; [window makeKeyAndVisible]; [[UIApplication sharedApplication] setStatusBarHidden: YES]; cocos2d::CCApplication::sharedApplication().run(); return YES; }
AppController.mm 파일 내용중 일부입니다. 다 Objective-C문법을 쓰다가 마지막에 run()부분은 c++이죠. 이렇게 혼용이 가능한게 .mm인거죠. 이러한 일들은 Xcode 내부에서 자동적으로 확장자에 맞는 컴파일러를 선택해 컴파일을 한다고 합니다.
cpp class에 NSString* 변수를 멤버로 가지고 있으면서 사용도 가능하다고 하네요.
참고 : 위키
댓글
댓글 쓰기