在C ++中组织链接到外部库

时间:2010-05-23 20:01:09

标签: c++ cross-platform

在我正在开发的跨平台(Windows,FreeBSD)C ++项目中,我正在使用两个外部库Protocol BuffersZeroMQ。在这两个项目中,我正在跟踪最新的开发分支,因此这些库经常被重新编译/替换。

对于开发方案,保留libprotobuf.{a,lib}zeromq.{so,dll}的最佳位置在哪里?在构建项目之前,我是否应该将构建脚本从各自的项目目录复制到我的本地项目目录(例如MyProjectRoot/libMyProjectRoot/bin)?这似乎比把事情扔进/usr/local/lib更好,因为我不想用最新的实验版替换系统范围的稳定版本。

每当我指定链接的相对路径时,Cmake就会发出警告,所以我怀疑复制是一个比较好的解决方案呢?这是最好的方法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我建议你不要在源代码树中复制文件,绝对不要复制到系统文件夹中,而是去定义目标位置 -

  • $ BUILD_TARGET / bin - 最终二进制目标(.exe / .so / .dll等)
  • $ BUILD_TARGET / obj - 目标文件目的地(.obj等)
  • $ BUILD_TARGET / lib - 静态库目标(.lib等)

您可以使用优化/调试目标进一步开发 -

DEBUG

  • $ BUILD_TARGET / binD - 最终二进制目标(.exe / .so / .dll等)
  • $ BUILD_TARGET / objD - 目标文件目的地(.obj等)
  • $ BUILD_TARGET / libD - 静态库目标(.lib等)

RELEASE(OPTIMIZED)

  • $ BUILD_TARGET / binO - 最终二进制目标(.exe / .so / .dll等)
  • $ BUILD_TARGET / objO - 目标文件目的地(.obj等)
  • $ BUILD_TARGET / libO - 静态库目标(.lib等)

可能性无穷无尽,x86 / x64等。