如何在 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
我想使用 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