2012-09-07 3 views
4

나는 사용자가 브라우저 플러그인과 인터페이스하는 데 사용할 수있는 상태 표시 줄 아이콘을 상태 표시 줄에 놓을 Mac OS 용 브라우저 플러그인을 작성 중입니다. XCode 4.4.1에서 FireBreath 1.6 프로젝트를 성공적으로 구축했으며이를 브라우저에 설치할 수 있습니다. 그러나 FireBreath는 C++을 사용하는 반면, Mac OS 용 대다수의 기존 라이브러리는 Objective C로 작성되었습니다.FireBreath 프로젝트에 어떻게 Objective C 코드를 추가합니까?

/Mac/projectDef.make 파일에서 제안 된대로 here 및 Cocoa Framework 및 Foundation Framework를 추가했습니다. 다른 자원에 나는 인터넷에서 찾은 : 내 .mm 파일,하는 .m 파일을 엑스 코드에서 생성 될 새 프로젝트를 기대 prepmac.sh을 reran

target_link_libraries(${PROJECT_NAME} 
    ${PLUGIN_INTERNAL_DEPS} 
    ${Cocoa.framework} # added line 
    ${Foundation.framework} # added line 
) 

; 그러나, 그들은 무시되고있는 것으로 보인다. 나는 .cpp와 .h 파일 만 볼 수있다. 나는 projectDef.make 파일들에 대한 규칙을 추가하지만 차이 만들 것 같지 않습니다

file (GLOB PLATFORM RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
    Mac/[^.]*.cpp 
    Mac/[^.]*.h 
    Mac/[^.]*.m #added by me 
    Mac/[^.]*.mm #added by me 
    Mac/[^.]*.cmake 
) 

내가 수동으로 파일을 추가해도를, 내가 컴파일 오류의 시리즈를 얻을.

Parse Issue - Expected unqualified-id 
Parse Issue - Unknown type name 'NSString' 
Semantic Issue - Use of undeclared identifier 'NSString' 
Parse Issue - Unknown type name 'NSString' 
... 
... 
Semantic Issue - Use of undeclared identifier 'aSelectorName' 
... 
... 
Semantic Issue - Use of undeclared identifier 'aClassName' 
... 

그것은 유사한 오류가있는 약간의 시간이처럼 계속 ...

내가 읽은 바로는

, 이러한 오류가 있기 때문에 나타납니다 그 중 약 20 모든 파일 NSObjRuntime.h 파일과 관련이있다 이 프로젝트에 포함 된 것으로 생각되는 Foundation Framework에 대한 의존성에 대해 설명합니다. 나는 또한 Xcode에서 프로젝트를 클릭 해 보았습니다.

나는 다음에 무엇을 시도해야할지 모르겠습니다. 사람들은 C/C++ 코드에서 Objective C를 사용하는 것이 어렵지 않다고 말하지만 XCode와 Objective C를 처음 접하는 것은 혼란을 야기 할 수 있습니다. 이 새로운 플랫폼에서 이것은 나를위한 유일한 날 4입니다.

Objective C 코드를 컴파일하기 위해 XCode를 얻으려면 어떻게해야합니까? 제가 조금 새로운 것을 기억하십시오. 따라서 태그에 공통적으로 나타나는 막연한 한 줄 짜기와 달리 상세한 답변을 남겨두면 감사하겠습니다. 나는 내 머리 위로 조금 벗어나지 만,이 장애물을 지나쳐 나를 이겨낼 수 있다면 나는 거기에서부터 나아갈 수있을 것이라고 확신한다.

업데이트 : 프로젝트/MyPlugin/CMakeLists.txt을 편집하고 거기에 너무하는 .m 및 .mm 규칙에 추가

. prepmac.sh를 실행 한 후에는 파일이 프로젝트에 포함되지만 여전히 동일한 컴파일 오류가 발생합니다.

모든 .h 파일과 .mm 파일을 Obj C 코드에서 MyPlugin 루트 폴더로 이동하고 prepmac.sh 파일을 다시 작성했습니다. 문제가 여전히 존재합니다. 같은 컴파일 오류.

답변

2

문제점은 객관적인 c 유형 및/또는 포함하는 C++ 파일에 포함 된 .h 파일이 있다는 것입니다. C++에서 사용하는 모든 클래스를 원한다면 #ifdef에 모든 obj 관련 항목을 유지하거나 단순히 헤더 파일에 obj c를 표시하지 않아야합니다.

예를 들어, 당신은 당신의 헤더에이 IFDEF를 사용할 수 있습니다

#ifdef __OBJC__ 
    // Objective C/C++ code here 
#endif 

그것은 .H 파일 뿐만 아니라 헤더 파일이 포함되어 있습니다, 그래서 그들은 실제로 포함 된 것을 기억하는 것이 중요합니다. .cpp 파일에 객관적인 C 코드를 포함 시키면 컴파일러는 혼란을 느끼고 울부 짖습니다.


편집 : 기억해야 할 가장 중요한 것은 당신이 (목표 C 코드 또는 다른 파일)에 대한 객관적인 C 헤더 파일은 CPP 파일에서 포함되지 않도록 할 필요가 있다는 것입니다. 네가 할 수 있다면 너는 괜찮을거야.

+0

그래서 오픈 소스 Objective C 코드를 포함한다면 각 헤더를 편집해야합니까? 나는 이것을 피하기위한 방법으로 Prefix.pch 파일을 사용하는 것에 대해 뭔가 읽었고 Objective C 프로젝트 예제에서 보았지만 아직 FireBreath 프로젝트에 포함시키는 방법을 찾지 못했습니다. +1, 이것은 확실히 올바른 길로 나를 잡을 것입니다! 이것에 기초를 댈 시간을내어 주셔서 감사합니다! 그리고 네가 맞아! CMake는 고통이지만 어디에서 필요한지 볼 수 있습니다. :) – jmort253

+0

아니요 아니요. 오픈 소스 목적의 C 코드를 포함하고 있다면 C++ 파일에 포함될 헤더 파일의 헤더를 포함시키지 않아야합니다. 또는 #ifdef 문을 #ifdef 문으로 감싸서 cpp 파일에 포함되지 않도록하십시오. – taxilian

+0

좋습니다. 이제 이해가가는 것 같습니다. 나는 직장에서 맥을 떠났다. 그래서 나는 이것을 월요일에 시험해 볼 것이다. 다시 한 번 감사드립니다! :) – jmort253

관련 문제