我想使用文件(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命令行工具:运行脚本