CMakeconfigure_file命令可用于從模板創建具體檔案。呼叫configure_file(foo.h.in foo.h)將生成foo.h運行前不存在的檔案cmake。
然而,它沒有標GENERATED有財產。呼叫get_source_file_property(is_generated foo.h GENERATED)回傳NOTFOUND。
我所缺少的這種行為背后的理性是什么?
uj5u.com熱心網友回復:
根據檔案,源檔案屬性GENERATED的目的是防止在配置程序中檢查檔案:
然后使用此資訊來免除檔案的任何存在性或有效性檢查。
例如,add_executable如果配置時它的源檔案之一不存在,則命令可能會發出錯誤。在嘗試構建配置的專案之前,此檢查可能會發現問題。
但是GENERATED在構建階段之前不會檢查標有檔案的檔案。
因為configure_file是立即創建檔案,所以當這個檔案用于例如add_executable呼叫時檢查檔案是否存在是完全正確的。也就是說,沒有理由將此檔案標記為 GENERATED。
房產檔案中的第一段
此源檔案是作為構建或 CMake 程序的一部分生成的。
看起來有爭議,因為configure_file在“CMake 程序”中創建了檔案。
可能,通過注意到“CMake 程序”,他們想要適合file(GENERATE)實際設定該屬性。但之間的根本區別configure_file和file(GENERATE)有關檔案的生成時間:
configure_file在 CMake 執行下一個命令之前立即創建檔案CMakeLists.txt。- 但
file(GENERATE)僅在配置程序結束時創建檔案,畢竟CMakeLists.txt處理完畢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372510.html
上一篇:計算給定陣列中元素總和的程式
