开发者

Organization of linking to external libraries in C++

In a cross-platform (Windows, FreeBSD) 开发者_运维百科C++ project I'm working on, I am making use of two external libraries, Protocol Buffers and ZeroMQ. In both projects, I am tracking the latest development branch, so these libraries are recompiled / replaced often.

For a development scenario, where is the best place to keep libprotobuf.{a,lib} and zeromq.{so,dll}? Should I have my build script copy them from their respective project directories into my local project's directory (say MyProjectRoot/lib or MyProjectRoot/bin) before I build my project? This seems preferable to tossing things into /usr/local/lib, as I wouldn't want to replace a system-wide stable version with the latest experimental one.

Cmake warns me whenever I specify a relative path for linking, so I would suspect copying is a better solution then relative linking? Is this the best approach?

Thanks for your help!


I would suggest you don't copy files around in the source tree, and definitely not into the system folder, instead go for a defined target location -

  • $BUILD_TARGET/bin - final binary destination (.exe/.so/.dll etc)
  • $BUILD_TARGET/obj - object file destination (.obj etc)
  • $BUILD_TARGET/lib - static library destination (.lib etc)

You can further develop this using optimization/debug targets -

DEBUG

  • $BUILD_TARGET/binD - final binary destination (.exe/.so/.dll etc)
  • $BUILD_TARGET/objD - object file destination (.obj etc)
  • $BUILD_TARGET/libD - static library destination (.lib etc)

RELEASE (OPTIMIZED)

  • $BUILD_TARGET/binO - final binary destination (.exe/.so/.dll etc)
  • $BUILD_TARGET/objO - object file destination (.obj etc)
  • $BUILD_TARGET/libO - static library destination (.lib etc)

The possibilities are endless, x86/x64 etc.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜