我的C++ - 程序讀取和寫入文件。已經從源代碼目錄複製建目錄需要的地方,我用這條線中的CMakeLists.txt輸入文件:CMake:將文件從build目錄複製到源代碼中
configure_file(<input> <output> COPYONLY)
作爲一個積極的副作用QtCreator列出其項目視圖中的文件。
有沒有辦法從build目錄自動將文件複製到源代碼directy,以便我可以在源代碼directoy中更新輸出文件,並且也列在QtCreator的項目視圖中?
我的C++ - 程序讀取和寫入文件。已經從源代碼目錄複製建目錄需要的地方,我用這條線中的CMakeLists.txt輸入文件:CMake:將文件從build目錄複製到源代碼中
configure_file(<input> <output> COPYONLY)
作爲一個積極的副作用QtCreator列出其項目視圖中的文件。
有沒有辦法從build目錄自動將文件複製到源代碼directy,以便我可以在源代碼directoy中更新輸出文件,並且也列在QtCreator的項目視圖中?
如果你舒服,你也許可以使用相同的命令使用絕對路徑:
configure_file(${CMAKE_BINARY_DIR}/<path>/<input> ${CMAKE_SOURCE_DIR}/<path>/<output> COPYONLY)
其中CMAKE_BINARY_DIR
是:
[...]的完整路徑頂端當前CMake構建樹的級別。
雖然CMAKE_SOURCE_DIR
是:
[...]的完整路徑當前CMake的源代碼樹的頂層。
根據自定義的方式<input>
和<output>
只有當他們相對路徑documentation,configure_file
對待,否則就直接使用它們。
在其它術語:
<input>
是針對其的文件名:
相對路徑相對於CMAKE_CURRENT_SOURCE_DIR的值進行處理。
絕對路徑只是照原樣使用。
<output>
是文件名或針對其目錄:
相對路徑相對於CMAKE_CURRENT_BINARY_DIR的值進行處理。
絕對路徑只是照原樣使用。
你可以用另一種可能的方法是依靠file
命令和它的(讓我說)COPY
版本。從文檔:
COPY簽名將文件,目錄和符號鏈接複製到目標文件夾。相對於當前源目錄評估相對輸入路徑,並且相對於當前構建目錄評估相對目的地。複製可保留輸入文件時間戳,並優化文件(如果文件存在於具有相同時間戳的目標)。除非給出顯式權限或NO_SOURCE_PERMISSIONS,否則複製會保留輸入權限(默認值爲USE_SOURCE_PERMISSIONS)。
顯然絕對路徑可以直接使用,與configure_file
一樣,並且它們保持不變。相對路徑的處理方式與cmake
通常不同。
謝謝。它適用於絕對路徑。唯一缺少的是qtcreator現在不列出文件。順便說一句:使用兩個'configure_file'語句同時在兩個方向進行復制(source-> build和build-> source)是一個好主意。 – Sadik
爲什麼這是一個壞主意?無論如何,我正在給答案添加另一個可以使用的解決方案。 – skypjack
對不起,我錯了。 QtCreator墜毀,但我想這是另一個原因。我用第二個'configure_file'語句再次嘗試了它,現在該文件被更新並在qtcreator中列出。 – Sadik