2016-08-28 34 views
0

這似乎很簡單,但我浪費了大量的時間讓它工作。我只想構建並鏈接一個包含glfw3.h的main.cpp文件,但cmake沒有看到GLFW的lib路徑。對package_search_module的調用提供了正確的include dir,但生成的GLFW_LIBRARIES值只包含lib名稱'glfw3',而且其命令行上沒有爲該構建指定其目錄。cmake package_search_module爲glfw3發現軟件包,不提供完整的lib路徑

我在這裏錯過了什麼?

這是我很簡單CMakeFiles.txt:

cmake_minimum_required(VERSION 3.3) 
project(gltest) 

set(CMAKE_VERBOSE_MAKEFILE true) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

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

find_package(PkgConfig REQUIRED) 
pkg_search_module(GLFW REQUIRED glfw3) 
include_directories(${GLFW_INCLUDE_DIRS}) 
target_link_libraries(gltest ${GLFW_LIBRARIES}) 

message("GLFW_LIBRARIES=${GLFW_LIBRARIES}") 

這裏是生成輸出,在那裏你可以在上面那裏GLFW_LIBRARIES包含 'glfw3' 看到:

/Applications/CLion.app/Contents/bin/cmake/bin/cmake --build /Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug --target all -- -j 8 
/Applications/CLion.app/Contents/bin/cmake/bin/cmake -H/Users/dave/dev/gltest -B/Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug --check-build-system CMakeFiles/Makefile.cmake 0 
GLFW_LIBRARIES=glfw3 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug 
/Applications/CLion.app/Contents/bin/cmake/bin/cmake -E cmake_progress_start /Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug/CMakeFiles /Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug/CMakeFiles/progress.marks 
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/Makefile2 all 
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/gltest.dir/build.make CMakeFiles/gltest.dir/depend 
cd /Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug && /Applications/CLion.app/Contents/bin/cmake/bin/cmake -E cmake_depends "Unix Makefiles" /Users/dave/dev/gltest /Users/dave/dev/gltest /Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug /Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug /Users/dave/Library/Caches/CLion12/cmake/generated/7a31a53e/7a31a53e/Debug/CMakeFiles/gltest.dir/DependInfo.cmake --color= 
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/gltest.dir/build.make CMakeFiles/gltest.dir/build 
[ 50%] Linking CXX executable gltest 
/Applications/CLion.app/Contents/bin/cmake/bin/cmake -E cmake_link_script CMakeFiles/gltest.dir/link.txt --verbose=1 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -std=c++11 -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/gltest.dir/main.cpp.o -o gltest -lglfw3 
ld: library not found for -lglfw3 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make[2]: *** [gltest] Error 1 
make[1]: *** [CMakeFiles/gltest.dir/all] Error 2 
make: *** [all] Error 2 

而且最後,這裏是用於pkg_search_module呼叫glfw3.pc pkg配置:

prefix=/usr/local/Cellar/glfw3/3.2.1 
exec_prefix=${prefix} 
includedir=${prefix}/include 
libdir=${exec_prefix}/lib 

Name: GLFW 
Description: A multi-platform library for OpenGL, window and input 
Version: 3.2.1 
URL: http://www.glfw.org/ 
Requires.private: 
Libs: -L${libdir} -lglfw3 
Libs.private: -framework Cocoa -framework IOKit -framework CoreFoundation -framework CoreVideo 
Cflags: -I${includedir} 
~          

更新:我得到了它這個工作,但它仍然覺得不妥 cmake的文檔建議不要使用link_directories,但是我能夠使這項工作通過使用和建立鏈接庫的列表:

set(LINK_LIBRARIES) 

# GLFW lib 
find_package(PkgConfig REQUIRED) 
pkg_search_module(GLFW REQUIRED glfw3) 
include_directories(${GLFW_INCLUDE_DIRS}) 
link_directories(${GLFW_LIBRARY_DIRS}) 
set(LINK_LIBRARIES ${LINK_LIBRARIES} ${GLFW_LIBRARIES}) 

add_executable(gltest ${SOURCE_FILES}) 
target_link_libraries(gltest ${LINK_LIBRARIES}) 

回答

相關問題