[英]CMAKE - Glob files in post build
我想將中間對象文件從 build 文件夾復制到另一個文件夾中。 我使用 : file(GLOB OUTPUT_COMPILED_FILES_POST CONFIGURE_DEPENDS "IntCode/*/*" "ApplicationComps/*/src/Common/*.*)"
來收集文件的名稱,因為它們很多。
然后我使用file(COPY ${OUTPUT_COMPILED_FILES_POST} DESTINATION ${OBJECTS_FOLDER})
復制文件,但它沒有做任何事情,因為當 glob 命令正在工作時,文件尚未生成。
我有多個子目錄,第四個有 add_executable,它生成目標文件和 exe 文件,第五和第六個子目錄需要一些目標文件。
所以。 我的問題:
有沒有其他方法可以做到這一點?
我有多個子目錄,第四個有 add_executable,它生成目標文件和 exe 文件,第五和第六個子目錄需要一些目標文件。
您可以使用 CMake 中的對象庫來實現這一點。 請參閱下面的草圖和文檔:
假設您有一個更高級別的 CMakeLists.txt 文件,其中包含:
...
add_subdirectory(subdir1)
add_subdirectory(subdir2)
add_subdirectory(subdir3)
add_subdirectory(subdir4)
add_subdirectory(subdir5)
add_subdirectory(subdir6)
...
然后在 subdir4 的 CMakeLists.txt 中你會寫:
add_library(target4objs OBJECT src1.cpp src2.cpp ...)
add_executable(target4 extra_src_not_shared.cpp ...)
target_link_libraries(target4 PRIVATE target4objs)
在 subdir5/6 中你會寫:
add_executable(target5 src1.cpp ...)
target_link_libraries(target5 PRIVATE target4objs)
一般建議:將文件從構建樹手動復制到構建樹中的其他地方,或者特別是源樹,實際上從來不需要,而且是一個壞主意。
將所有shaders/*
文件復制到構建輸出中名為“shaders”的目錄中
file(GLOB out shaders/*)
foreach (o ${out})
message("${o} was copied to shaders")
file(COPY ${o} DESTINATION shaders)
endforeach ()
這只有時有效,例如當我重新加載 CMake 項目時,例如:
/opt/clion-2021.2.3/bin/cmake/linux/bin/cmake \
-DCMAKE_BUILD_TYPE=Debug -DCMAKE_DEPENDS_USE_COMPILER=FALSE \
-G "CodeBlocks - Unix Makefiles" \
/home/hack/glad
此外,它不執行“POST_BUILD”,因此請謹慎對待。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.