2013-03-14 25 views
8

在我的项目中有一个包含第三方库(google test,zlib,...)的文件夹。我想在建立所有这些库时将这些库放在一个公用文件夹中。我试图用cmake做到这一点,但我遇到了问题。我想这样的代码:使用cmake编译后复制或移动库

add_subdirectory(gtest-1.6.0)  
add_custom_command(
      TARGET gtest_main 
      POST_BUILD 
      COMMAND ${CMAKE_COMMAND} -E copy ${SRC_LIB_DIR}/*.a ${DST_LIB_DIR}) 

我想这个问题可能是,如果你设置你的CMakeLists的CMAKE_LIBRARY_OUTPUT_DIRECTORY变量GTEST主要在不是在这个水平,但在一个较低的水平

回答

8

定义的目标。在调用add_subdirectory(并且子项目不覆盖它)之前,txt应该放在正确的位置。

此外,像这样子项目中的目标保持它们对输出文件的依赖。哪些不适用于您的副本 - 目标将始终过时并因此重建。

编辑:我忽略了你的复制命令是复制.a文件,并感谢@弗雷泽的评论,我也了解到,以及CMAKE_ARCHIVE_OUTPUT_DIRECTORY应该做的伎俩。

+0

不起作用。制作此代码:SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY“$ {PROJECT_BINARY_DIR}/third_party/lib/release”)然后添加gtest子目录,什么都不做。这些库总是去gtest目录根目录。 – Killrazor 2013-03-14 14:57:37

+4

由于默认情况下gtest会建立'STATIC'库,所以您需要设置['CMAKE_ARCHIVE_OUTPUT_DIRECTORY'](http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:ARCHIVE_OUTPUT_DIRECTORY)而不是CMAKE_LIBRARY_OUTPUT_DIRECTORY是'SHARED'库。 – Fraser 2013-03-15 00:30:07

+0

谢谢弗雷泽和帕特里克。 CMAKE_ARCHIVE_OUTPUT_DIRECTORY取得了诀窍。感谢两个! – Killrazor 2013-03-20 16:43:24