我使用的是CLion 2016.2.2,我想调试libtins库中的方法。但是,看起来源代码不可用,因为当试图从libtins跳入方法时,调试器不会进入并仅更新当前视图。CLion:通过添加源文件启用外部库的调试
我试着按照this post中的建议添加include_directories("/home/patrick/libtins/")
或include_directories("/home/patrick/libtins/src/")
,而libtins是从libtins存储库克隆的根文件夹。但CLion仍然找不到与libtins库相关的源文件。
我的CMake的文件看起来如下:
project(myproject)
# Define CMake settings
cmake_minimum_required(VERSION 3.2)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "Release")
ENDIF()
IF (CMAKE_BUILD_TYPE MATCHES Debug)
MESSAGE(STATUS "Running Debug configuration.")
ELSEIF (CMAKE_BUILD_TYPE MATCHES Release)
MESSAGE(STATUS "Running Release configuration.")
ENDIF()
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
# Add the library source files
SET(SOURCE_FILES cxx/myclass.cpp cxx/myclass.h)
# Include SQLiteCpp library and build it
option(SQLITECPP_RUN_CPPLINT OFF)
include_directories(SQLiteCpp/include)
add_subdirectory(SQLiteCpp)
# Find libtins library
FIND_LIBRARY(TINS_LIBRARY tins)
IF(TINS_LIBRARY)
MESSAGE(STATUS "Tins library found in ${TINS_LIBRARY}")
ELSE()
MESSAGE(FATAL_ERROR "Tins library not found.")
ENDIF()
FIND_PACKAGE(PythonLibs 3.0 REQUIRED)
IF(PYTHONLIBS_FOUND)
INCLUDE_DIRECTORIES("${PYTHON_INCLUDE_DIRS}")
ELSE()
MESSAGE(FATAL_ERROR "Unable to find Python libraries.")
ENDIF()
# Find and configure BOOST library
FIND_PACKAGE(Boost 1.54 QUIET)
IF (Boost_FOUND)
INCLUDE_DIRECTORIES("${Boost_INCLUDE_DIRS}")
SET(Boost_USE_STATIC_LIBS OFF)
SET(Boost_USE_MULTITHREADED ON)
SET(Boost_USE_STATIC_RUNTIME OFF)
# Find the boost python 3 component
SET(PYTHON_VERSIONS python3 python-py35 python-py34 python-py33 python-py32)
FOREACH(VERSION ${PYTHON_VERSIONS})
FIND_PACKAGE(Boost COMPONENTS ${VERSION} QUIET)
IF(Boost_FOUND)
MESSAGE(STATUS "Python Boost found as '${VERSION}'.")
BREAK()
ENDIF()
ENDFOREACH(VERSION)
IF(NOT Boost_FOUND)
MESSAGE(FATAL_ERROR "Python Boost component not found.")
ENDIF()
ELSE()
MESSAGE(FATAL_ERROR "Unable to find the Boost libraries (version 1.54 or higher).")
ENDIF()
SET_target_properties(sqlite3 PROPERTIES POSITION_INDEPENDENT_CODE ON)
ADD_EXECUTABLE(myproject ${SOURCE_FILES} "/home/pjattke/libtins/")
TARGET_LINK_LIBRARIES(myproject ${Boost_LIBRARIES} "${TINS_LIBRARY}" SQLiteCpp sqlite3 pthread dl)
究竟我必须改变,以使可用于调试的克利翁的源文件?
认真吗?用于调试到外部库(已安装调试信息)的UL认证解决方案是将库作为项目的一部分构建?我几乎没有那么容易。我也对CLion有这个问题 - 我发现即使gdb可以找到库资源,CLion仍然不能。 –
@JohnCalcote将库构建为项目的一部分,确保您具有与项目其他部分相同的编译标志(这里是debug)。所以,是的,CLion会找到它的,对,我会这么简单。在任何情况下,都不能依赖调试信息进行安装。 – oLen
@JohnCalcote是100%正确的。在大多数情况下,建议完全重做外部构建是疯狂的。大多数项目都有非常复杂的构建系统,并建议您随便将它放入自己的构建系统中,这不是现实。 –