2017-08-03 78 views
2

我的C++ - 程序讀取和寫入文件。已經從源代碼目錄複製建目錄需要的地方,我用這條線中的CMakeLists.txt輸入文件:CMake:將文件從build目錄複製到源代碼中

configure_file(<input> <output> COPYONLY) 

作爲一個積極的副作用QtCreator列出其項目視圖中的文件。

有沒有辦法從build目錄自動將文件複製到源代碼directy,以便我可以在源代碼directoy中更新輸出文件,並且也列在QtCreator的項目視圖中?

回答

2

如果你舒服,你也許可以使用相同的命令使用絕對路徑:

configure_file(${CMAKE_BINARY_DIR}/<path>/<input> ${CMAKE_SOURCE_DIR}/<path>/<output> COPYONLY) 

其中CMAKE_BINARY_DIR是:

[...]的完整路徑頂端當前CMake構建樹的級別。

雖然CMAKE_SOURCE_DIR是:

[...]的完整路徑當前CMake的源代碼樹的頂層。

根據自定義的方式<input><output>只有當他們相對路徑documentationconfigure_file對待,否則就直接使用它們。
在其它術語:

  • <input>是針對其的文件名:

    相對路徑相對於CMAKE_CURRENT_SOURCE_DIR的值進行處理。

    絕對路徑只是照原樣使用。

  • <output>是文件名或針對其目錄:

    相對路徑相對於CMAKE_CURRENT_BINARY_DIR的值進行處理。

    絕對路徑只是照原樣使用。


你可以用另一種可能的方法是依靠file命令和它的(讓我說)COPY版本。從文檔:

COPY簽名將文件,目錄和符號鏈接複製到目標文件夾。相對於當前源目錄評估相對輸入路徑,並且相對於當前構建目錄評估相對目的地。複製可保留輸入文件時間戳,並優化文件(如果文件存在於具有相同時間戳的目標)。除非給出顯式權限或NO_SOURCE_PERMISSIONS,否則複製會保留輸入權限(默認值爲USE_SOURCE_PERMISSIONS)。

顯然絕對路徑可以直接使用,與configure_file一樣,並且它們保持不變。相對路徑的處理方式與cmake通常不同。

+0

謝謝。它適用於絕對路徑。唯一缺少的是qtcreator現在不列出文件。順便說一句:使用兩個'configure_file'語句同時在兩個方向進行復制(source-> build和build-> source)是一個好主意。 – Sadik

+0

爲什麼這是一個壞主意?無論如何,我正在給答案添加另一個可以使用的解決方案。 – skypjack

+0

對不起,我錯了。 QtCreator墜毀,但我想這是另一個原因。我用第二個'configure_file'語句再次嘗試了它,現在該文件被更新並在qtcreator中列出。 – Sadik

相關問題