2017-12-08 10 views
0

cmakeを使用してMacOSでGLFWをソースからビルドしたが、すべてうまくいった。私はclionにcmakeのを使用してプログラムをコンパイルしようとしていたときしかし、私は次のエラーました:私は、インターネットおよびドキュメントを通じて閲覧CMakeでCLion内のGLFW3ライブラリがMacOS上で未定義のシンボルを生成する

Scanning dependencies of target triangle 
[ 50%] Building CXX object CMakeFiles/triangle.dir/main.cpp.o 
[100%] Linking CXX executable triangle 
Undefined symbols for architecture x86_64: 
    "_CFArrayAppendValue", referenced from: 
    __glfwInitJoysticksNS in libglfw3.a(cocoa_joystick.m.o) 
    _matchCallback in libglfw3.a(cocoa_joystick.m.o) 
    "_CFArrayCreateMutable", referenced from: 
    __glfwInitJoysticksNS in libglfw3.a(cocoa_joystick.m.o) 
    _matchCallback in libglfw3.a(cocoa_joystick.m.o) 
... (There are a huge bunch of errors like this, let me know if you want to read all of them) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make[3]: *** [triangle] Error 1 
make[2]: *** [CMakeFiles/triangle.dir/all] Error 2 
make[1]: *** [CMakeFiles/triangle.dir/rule] Error 2 
make: *** [triangle] Error 2 

を、私はこのように、フレームワークの引数を指定してコンパイルする必要があることが見つかりました:

cc -o myprog myprog.c -lglfw -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo 

コマンドラインで試したところ、うまくいきました。しかし、私がCLion(またはCMake?)で何かをやりたいのであれば、どうしたらいいですか、あるいはどのようにCMakeでフレームワークを使うことができますか?

私のCMakeLists.txtは、あなたが知りたい場合には:

cmake_minimum_required(VERSION 3.8) 
project(triangle) 

set(CMAKE_CXX_STANDARD 11) 
find_package(glfw3 REQUIRED) 

set(SOURCE_FILES main.cpp) 
add_executable(triangle ${SOURCE_FILES}) 
target_link_libraries(triangle glfw3) 

答えて

0

私は私のCMakeLists.txtにこれを追加し、それが動作するようになりました:

set(CMAKE_CXX_FLAGS "-framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo") 

ので、私のCMakeLists.txtはこのようになります:

cmake_minimum_required(VERSION 3.8) 
project(triangle) 

set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_CXX_FLAGS "-framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo") 
find_package(glfw3 REQUIRED) 

set(SOURCE_FILES main.cpp) 
add_executable(triangle ${SOURCE_FILES}) 

target_link_libraries(triangle glfw3) 

もっと「優雅な」方法があることを願っていますが、これで今私の問題は解決します。

関連する問題