2017-12-27 1128 views
0

我有一個C++庫(retdec-CPP),這是我建立並使用安裝CMake的3.10.0使用Visual Studio 2015的cmake

我想在一個Visual Studio 2015的項目中使用這個庫(此特定版本是需要的)。我知道需要單獨構建調試和發佈,因此我遵循this guide

現在我想用這個c。使用CMake的++庫在我的Visual Studio項目,但我有寫作的CMakeLists.txt

麻煩這是怎麼它現在看起來:

project(prog CXX) 
cmake_minimum_required(VERSION 3.6) 

find_package(Threads) 


set(RETDEC_SRC_DIR "C:/Users/kkkkk/Desktop/retdec-cpp") 
set(RETDEC_BUILD_DIR "C:/Users/kkkkk/Desktop/retdec-cpp/build") 

#added : 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 
# 

include_directories(SYSTEM "${RETDEC_SRC_DIR}/include") 
link_directories(
    "${RETDEC_BUILD_DIR}/debug/src/retdec" 
    "${RETDEC_BUILD_DIR}/debug/third_party/src/cpp-netlib-build/libs/network/src" 
    "${RETDEC_BUILD_DIR}/debug/src/json-cpp-build/src/lib_json" 
    "${RETDEC_BUILD_DIR}/release/src/retdec" 
    "${RETDEC_BUILD_DIR}/release/third_party/src/cpp-netlib-build/libs/network/src" 
    "${RETDEC_BUILD_DIR}/release/src/json-cpp-build/src/lib_json" 

) 


add_executable(prog prog.cpp) 
target_link_libraries(
retdec 
    boost_filesystem 
    boost_system 
    boost_thread 
    boost_chrono 
    boost_date_time 
    boost_atomic 
    ssl 
    crypto 
    cppnetlib-uri 
    cppnetlib-client-connections 
    jsoncpp 
    ${CMAKE_THREAD_LIBS_INIT} 

) 

當我建立它在Visual Studio中,它不斷上顯示此錯誤:
LNK1104:無法打開文件retdec.lib

顯然有一些錯誤的,我CMakeLists。

如何在使用Cmake的Visual Studio 2015項目中包含此庫?

+0

「retdec.lib」在你的鏈接目錄之一中嗎?我不希望事實如此。它們看起來像源文件夾。 – drescherjm

+0

您需要爲現有目標調用target_link_libraries,即您應該用'prog'作爲第一個參數來調用它。 – vre

+0

如果該文件夾存在於該文件夾中,可能是混合了32位和64位。 – drescherjm

回答

0

從錯誤的問題:從事實

LNK1104:cannot open file retdec.lib

結果,所有你在link_directories()調用指定的目錄中,似乎並不包括retdec.lib您正在試圖連接的內功能target_link_libraries()

解決方法很簡單:

  • 找到retdec.lib的位置,並把它放在你已經鏈接的一個文件夾(我在你link_directories發現一個item調用價值:"${RETDEC_BUILD_DIR}/release/src/retdec"是這樣的按照名稱來判斷,它好像是src文件的目錄,而不是libs。在哪裏尋找類似"${RETDEC_BUILD_DIR}/release/lib"的東西?)。
  • 或者,您可以找到retdec.lib的位置,然後將該目錄添加到您的link_directories()列表中。