在构建期间,如何为某些COMMAND生成的文件创建目录?

时间:2018-04-17 10:07:10

标签: cmake

我在CMake中编写自定义命令,以便在构建时将文件转换为二进制格式。但是,我使用的工具需要预先存在文件目录;它不会自动创建目录。

目前我的CMake宏看起来像这样:

MACRO(ConvertToBinary _name)
    ADD_CUSTOM_COMMAND(
        OUTPUT ${CMAKE_BINARY_DIR}/${_name}.bin
        COMMAND ${EXE_DIR}/toBinary -i ${CMAKE_CURRENT_SOURCE_DIR}/${_name} -o ${CMAKE_BINARY_DIR}/${_name}.bin
        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_name}
    )
ENDMACRO(ConvertToBinary)

此宏不适用于_name参数相等,例如,对于" test / sample.txt",因为该工具在test/文件夹下运行{ {1}}不存在。

如何在生成文件的工具之前创建目录?

我试图通过在CMake的帮助下预先创建文件(和目录)来克服这个问题。因此,该工具将与创建的目录一起运行,并可以覆盖输出文件。我尝试过以下方法:

${CMAKE_BINARY_DIR}

但它没有用。我无法找到有关如何使用CMake在构建时创建文件的信息,因此感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在CMake中,您可以提取文件的目录组件并创建此目录。

下面的代码可用于生成文件但不为其创建目录的工具。

# Assume some tool generates file '${file}', but don't create directory for it.
#
# Extract directory component for a file
get_filename_component(_dir ${file} DIRECTORY)
add_custom_command(OUTPUT ${file}
    COMMAND ${CMAKE_COMMAND} -E make_directory ${_dir} # Create output directory
    COMMAND <tool-which-generates-file> ... ${file}
)

另请参阅that question有关在CMake中创建目录的方法。