gpt4 book ai didi

build - 在 CMake 中处理自定义文件类型依赖项的理想方法是什么?

转载 作者:行者123 更新时间:2023-12-05 05:08:07 26 4
gpt4 key购买 nike

我正在处理一个 C++ 项目,我遇到了一个我过去也遇到过的问题。除了实际的可执行文件外,我还有需要编译的着色器文件。

理想情况下,源目录中名为 hello.vert 的文件将在构建时编译为我的构建输出目录中的 hello.vert.spv

我的尝试

我当前的实现不起作用 - 似乎没有创建输出文件,如果我将 COMMAND 替换为“echo hi”之类的东西,触摸源文件然后构建,它确实如此也不显示任何输出。这基本上是我创建的:

add_executable(test test.cpp)

function(build_shader TARGETOBJ SHADERNAME)
set(FILENAME "${CMAKE_SOURCE_DIR}/${SHADERNAME}")
set(OUTNAME "${CMAKE_BINARY_DIR}/${SHADERNAME}.spv")
add_custom_command(OUTPUT ${OUTNAME}
COMMAND glslc ${FILENAME} -o ${OUTNAME})
add_custom_target(MAKE_${SHADERNAME} ALL DEPENDS ${FILENAME})
add_dependencies(${TARGETOBJ} MAKE_${SHADERNAME})
endfunction()

build_shader(test hello.vert)
build_shader(test hello.frag)

理想世界

在普通的 makefile 中,我的解决方案如下所示:

test: hello.vert.spv hello.frag.spv
...

%.spv: %
glslc $< -o $@

在 CMake 中,我无法找到一种方法来以自定义方式处理某些文件类型 - 这将使解决方案变得如此简单:

add_executable(test test.cpp hello.vert hello.frag)

有没有一种理智、可靠的方法来做这类事情?

最佳答案

你的意思是:

function(build_shader TARGETOBJ SHADERNAME)
set(FILENAME "${CMAKE_SOURCE_DIR}/${SHADERNAME}")
set(OUTNAME "${CMAKE_BINARY_DIR}/${SHADERNAME}.spv")
add_custom_command(OUTPUT ${OUTNAME}
COMMAND glslc ${FILENAME} -o ${OUTNAME}
DEPENDS ${FILENAME})
add_custom_target(MAKE_${SHADERNAME} ALL DEPENDS ${OUTNAME})
add_dependencies(${TARGETOBJ} MAKE_${SHADERNAME})
endfunction()

目标 取决于OUTNAMEOUTNAME 依赖于 FILENAME

关于build - 在 CMake 中处理自定义文件类型依赖项的理想方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58530457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com