2017-08-05 38 views
2

通常Conan包仅包含构建构件等*.dll*.lib*.pdb*.so*.a*.dylib文件作为给定çC++库以及头。然而,有时当你调试你的代码时,使用这个库是非常有用的,能够进入库代码来查看内部发生的事情。例如,要确定何时出现问题,这是由于库的错误使用还是错误引起的。我可以检索与Conan软件包管理器打包的库的源代码,以便能够在其中进行调试吗?

  1. 是否有可能与您使用的包检索源代码构建以便能够在其中进行调试?
  2. 如果这对于任意包是不可能的,是否可以自己创建这样的包?
+1

删除答案,因为我不知道柯南是什么(除了野蛮人) –

+1

@PeterJ柯南是C和C++库包管理器。我已经链接到它的官方网站的答案。该软件包通常包含已经与其标题一起构建的库。似乎默认情况下,该源在软件包中不可用。 – bobeff

+0

我想你想看看这里:https://github.com/conan-io/conan – mko

回答

3

有两种策略,可能工作到调试的依赖关系:

  • 迫使它从源打造,与--build=PkgName说法。从源代码构建包时,根据构建系统的不同,二进制工件可能会引用构建该包的临时构建文件夹,然后能够找到它们并使用该调试。这种策略可以用于第三方软件包,即使他们不考虑调试。
  • 如果您自己创建软件包,并且希望能够直接调试二元工件,而无需从源代码重新构建它,那么正确的方法也是打包源代码。如果调试器需要一些帮助来定位这些源,那么应该使用它。

随着gdb你可以做类似

def build(self): 
    cmake = CMake(self.settings) 
    gcc_dbg_src = "" 
    if self.settings.compiler == "gcc" and self.settings.build_type == "Debug": 
     gcc_dbg_src = ' -DCMAKE_CXX_FLAGS="-fdebug-prefix-map=%s/hello=src"' % os.getcwd() 
    self.run('cmake hello %s %s' % (cmake.command_line, gcc_dbg_src)) 
    self.run("cmake --build . %s" % cmake.build_config) 

def package(self): 
    self.copy("*.h", dst="include", src="hello") 
    if self.settings.build_type == "Debug": 
     self.copy("*.cpp", dst="src", src="hello") 
    self.copy("*.lib", dst="lib", keep_path=False) 
    self.copy("*.a", dst="lib", keep_path=False) 

要确保你使用正确的标志编译,并在源文件打包了。然后,在消费者方面,您可能需要imports.cpp文件,因此gdb调试器可以在正在调试的二进制文件之外找到它们,或者使用调试器路径来添加包文件夹。

在Windows中,使用Visual Studio,你可能要打包的.pdb文件

相关问题