【发布时间】:2018-09-27 06:05:51
【问题描述】:
我正在 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”,因为该工具在 ${CMAKE_BINARY_DIR} 下的 test/ 文件夹不存在的情况下运行。
如何在生成文件的工具运行前创建目录?
我试图通过在 CMake 的帮助下预先创建文件(和目录)来解决这个问题。因此该工具将在创建的目录下运行,并且可以覆盖输出文件。我尝试了以下方法:
MACRO(ConvertToBinary _name)
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_BINARY_DIR}/${_name}.bin
FILE(WRITE ${CMAKE_BINARY_DIR}/${_name}.bin "Dummy")
COMMAND ${EXE_DIR}/toBinary -i ${CMAKE_CURRENT_SOURCE_DIR}/${_name} -o ${CMAKE_BINARY_DIR}/${_name}.bin
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_name}
)
ENDMACRO(ConvertToBinary)
但它没有工作。我找不到有关如何在构建时使用 CMake 创建文件的信息,因此感谢您提供任何帮助。
【问题讨论】:
-
使用 CMake 的 command line tool mode.
-
@Florian:引用的问题描述了如何创建目录,但没有描述如何从文件中提取目录组件。 (嗯,我知道get_filename_component 很简单)。但是由于不为输出文件创建目录的工具非常普遍,因此有一个关于该问题的完整解决方案的问题/答案会很有用。 (另一种方法可能是为相关问题添加相应的答案,但不改变该问题本身似乎效率不高)。
-
@Cyril:我稍微重新排列了您的问题帖子,以便将您的 主要问题(为文件创建目录)与您克服该问题的尝试(创建文件本身)分开.随意对问题进行更多改进,以便将来的读者会发现它很有用。
标签: cmake