2010-05-23 63 views
0

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

对于开发场景,哪里是最好的地方保持libprotobuf.{a,lib}zeromq.{so,dll}?在构建我的项目之前,我是否应该让构建脚本将其从各自的项目目录复制到本地项目的目录中(如MyProjectRoot/libMyProjectRoot/bin)?这似乎更倾向于将事情抛入/usr/local/lib,因为我不想用最新的实验版本替换系统范围内的稳定版本。

只要我指定链接的相对路径,Cmake会发出警告,所以我会怀疑复制是一种更好的解决方案,然后相对链接?这是最好的方法吗?

感谢您的帮助!

回答

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(优化)

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

可能性是无穷的,在x86/x64等

+0

谢谢您的回答。似乎每当我建立一个库时,我总是应该指定该库的完整路径作为构建过程的一部分,并且只根据我创建的构建类型来更改输出的目标。 – 2010-05-26 20:50:24