2017-12-27 155 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()列表中。