如何在 CMake 中通过生成器表达式创建目录?

How to make directory by generator expressions in CMake?

我想使用 file(MAKE_DIRECTORY 创建一个目录,但它不适用于生成器表达式。

我正在尝试在另一个 CMake 模块中使用生成器表达式,作为粗略的代码片段:

function_from_another_module(target_name)

在该模块中:

file(MAKE_DIRECTORY $<TARGET_FILE_DIR:${target_name}>/foo/bar)

在我的真实案例中,我正在尝试对我的 exe 目标进行一些管理、复制资产、生成文件和一些其他基于平台的配置。

file() 命令在配置时执行,此时生成器表达式尚未计算。此外,结果可能取决于哪个在配置过程中永远不可用,仅在构建期间。

不过,您可以通过 add_custom_command 添加构建事件逻辑来获得所需的结果:

add_custom_command(TARGET ${target_name} # correct target to attach logic to?
                   PRE_BUILD             # or PRE_LINK/POST_BUILD ? 
                   COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${target_name}>/foo/bar")

根据您的资产管理逻辑,您可能想要创建一个执行复制的 cmake 脚本,使用 ${CMAKE_COMMAND} -P script_file.cmake ... 执行它并使用 -D 选项传递必要的参数,请参阅 CMake Command Line Tool: Run a Script