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



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

我正试图在另一个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命令行工具:运行脚本

最新更新