2012-10-31 175 views
1

我是CMake的新手。我有我的項目編譯。我有這樣CMake使用copy_if_different遞歸複製文件

項目的結構

  • SRC

    1. 測試
      的.cpp(所有源文件)和的CMakeLists.txt這個文件夾(創建靜態庫)
    2. 示例
      .cpp(所有源文件)和此文件夾的CMakeLists.txt(創建靜態庫)
  • 包括

    1. 測試
      .H(所有頭文件)
    2. 例如
      .H(所有頭文件)
  • 構建

    1. C MakeLists.txt(主CMakelist文件)
  • LIB

    1. 測試(包含生成的文件)
    2. 例(包含所生成的文件)

問題是如何複製所有靜態文件,即。從測試和示例文件夾並將它們遞歸地放在二進制結構之外的另一個文件夾中?

我主要的CMakeLists.txt文件:

PROJECT(copythefiles) 

SET(CMAKE_CURRENT_BINARY_DIR ".") 

add_subdirectory(/src/test /lib/test) # I am specifying the location where the files are to be generated 
add_subdirectory(/src/example /lib/example) 

ADD_CUSTOM_TARGET(a ALL COMMAND ${CMAKE_COMMAND} -E echo "\{X}" > ${CMAKE_CURRENT_BINARY_DIR}/lib/test/libtest.a) 

ADD_CUSTOM_COMMAND(TARGET a POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different 
     ${CMAKE_CURRENT_BINARY_DIR}/lib/test/libtest.a 
     ${CMAKE_CURRENT_BINARY_DIR}/lib/libtest.a) 

此份文件。但我有大約20個項目,我想遞歸地做。

謝謝:)

回答

2

這是很正常的頂層的CMakeLists.txt文件放在項目的根目錄。如果您將CMakeLists.txt從「/ build」移出到根目錄,那麼您應該能夠調用add_subdirectory,而無需爲每個個案指定二進制路徑。

假設你移動CMakeLists文件,那麼你就可以在add_subdirectory調用之前插入此:

function(MoveLib TheTarget) 
    add_custom_command(TARGET ${TheTarget} POST_BUILD 
        COMMAND ${CMAKE_COMMAND} -E 
         copy $<TARGET_FILE:${TheTarget}> ${CMAKE_SOURCE_DIR}/lib) 
endfunction() 

execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_SOURCE_DIR}/lib) 

這就允許您添加例如MoveLib(my_test)位於庫的CMakeLists.txt文件中,其中my_test是有關庫的名稱。


所有庫的副本將以「/ lib」結尾。如果你不是真的想要副本,那麼你應該看看ARCHIVE_OUTPUT_DIRECTORY屬性。如果你只是簡單地添加

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib) 

那麼你所有的靜態庫都會以「/ lib」結尾。雖然有幾件事要注意。

共享庫不包括在ARCHIVE_OUTPUT_DIRECTORY中。儘管共享庫的細節在ARCHIVE_OUTPUT_DIRECTORY的文檔中。另外,一些生成器(例如MSVC)會將每個配置的子目錄追加到指定的目錄,所以你最終會得到「/ lib/Debug」,「/ lib/Release」等等。你可以繞過這個由CMAKE_ARCHIVE_OUTPUT_DIRECTORY具體配置的版本設置爲全指向${CMAKE_SOURCE_DIR}/lib

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/lib) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/lib) 
+0

能否請你幫我解決這個問題。 http://stackoverflow.com/questions/13729478/missing-source-and-include-folder-when-integrating-cmake-with-eclipse/13731123#13731123 – Pintu