我在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在构建时创建文件的信息,因此感谢任何帮助。
答案 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中创建目录的方法。