在使用 add_custom_command 命令时,需要用到以下参数:
OUTPUT:指定生成文件的路径; DEPENDS:指定生成文件所依赖的文件; COMMAND:指定生成文件的命令。
如果在 add_custom_command 中指定的生成文件路径不是在当前目录下,而是在 add_subdirectory 中的某个子目录中,那么在 add_subdirectory 中可能会找不到该文件,导致编译失败。
这种情况下,可以在 CMakeLists.txt 文件中使用 SET 指令,为 add_custom_command 生成的文件设置全局变量,然后在 add_subdirectory 中使用该全局变量即可找到该文件。示例代码如下:
CMakeLists.txt:
ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated_file.txt COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/generated_file.txt )
SET(GENERATED_FILE ${CMAKE_CURRENT_BINARY_DIR}/generated_file.txt)
ADD_SUBDIRECTORY(subdir)
subdir/CMakeLists.txt:
ADD_EXECUTABLE(my_exec ${GENERATED_FILE} main.cpp)
其中,SET 指令用于设置 GENERATED_FILE 变量,ADD_EXECUTABLE 命令用于在 subdir 目录中生成可执行文件 my_exec,并将 GENERATED_FILE 变量作为参数传递给 ADD_EXECUTABLE 命令,从而找到生成的文件。