在这个问题中:
如何使用CMake构建fatbin文件?
我们看到了如何制定一对add_custom_command()
和add_custom_target()
命令,用于从.cu
文件构建.fatbin
文件:
add_custom_command(
OUTPUT my_src.fatbin
COMMAND ${CMAKE_CUDA_COMPILER} -fatbin -o foo.fatbin
"${CMAKE_CURRENT_SOURCE_DIR}/my_src.cu"
MAIN_DEPENDENCY my_src.cu
)
add_custom_target(dummy ALL DEPENDS my_src.fatbin)
这些文件是什么以及如何使用的细节对这个问题无关紧要(我希望(;我想做的是概括这两个特定的命令,这样我不仅可以从my_src.cu
构建my_src.fatbin
,还可以轻松地将我指定的任何.cu
文件构建到.fatbin
文件中。本质上,相当于Make's:
$(OBJDIR)/%.fatbin : $(SRCDIR)/%.cu
$(CUDA_COMPILER) $(CUDA_CPP_FLAGS) -fatbin -o $@ $<
这样做的恰当成语是什么?
也许函数是正确的方法。像这样的东西?:
function(add_fatbin target_basename source_file)
# TODO: Should I check target_basename isn't a full path?
set(target_filename "${target_basename}.fatbin")
add_custom_command(
OUTPUT "${target_filename}"
COMMAND ${CMAKE_CUDA_COMPILER} -fatbin -o "${target_filename}"
"${source_file}"
MAIN_DEPENDENCY "${source_file}"
)
add_custom_target("${target_basename}_fatbin_tgt" ALL DEPENDS "${target_filename}")
endfunction()