簡體   English   中英

CMAKE - 后期構建中的 Glob 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM