- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些.metal
文件,我想将它编译成.metallib
。整个构建系统都在使用 CMake,我也将使用它来编译 .metal
。
要构建 .metallib,我必须使用接下来的两个命令:
xcrun -sdk macosx metal -c MyLibrary.metal -o MyLibrary.air
xcrun -sdk macosx metallib MyLibrary.air -o MyLibrary.metallib
有没有什么方便的方法可以使用 CMake 来设置编译器,CMake 会自动完成所有操作?或者我应该使用 add_custom_command
并手动调用 xcrun
?
最佳答案
TL;DR 使用自定义命令/目标和添加新语言这两种方法都是有效的。选择似乎取决于可重用性、分发范围、目标用户等之间的权衡。就个人而言,我最初会选择前者。
话虽如此,如果您选择 add_custom_command
/add_custom_target
方法,它可以让你走得很远。只需确保您提供实际目标并将它们与自定义命令的 OUTPUT
链接,以便能够设置适当的依赖项并避免在依赖项仍然是最新的情况下不必要地重新执行目标.例如,
set(FOO_FILE "foo.txt")
add_custom_command(OUTPUT ${FOO_FILE}
COMMAND ${CMAKE_COMMAND} -E touch ${FOO_FILE}
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
COMMENT "Creating ${FOO_FILE}"
VERBATIM)
add_custom_target(foo DEPENDS ${FOO_FILE})
添加新语言的方法有点复杂,因为它的目标是更通用,并将语言支持作为 CMake 功能提供(即不依赖于特定项目)。为此,您需要定义语言的各个方面,例如编译器和用于处理源文件的规则。除此之外,特征检测和测试通常也属于这里。有关更详细的文档,请查看 here .
但是,研究 CMake 支持的实际语言可能会有所帮助。我建议在 CMake 的 Modules
目录下查看 CUDA(这会引导您查看 Compiler
和 Platform
子目录).
注意:通过邮件列表挖掘,我碰到了这个 thread ,其中提到第二种方法可能不适用于非基于 Makefile 的生成器。从线程(或现有文档)中不清楚,我不能尝试它,因为我没有通过这样的工具(例如 MSVC 或 Xcode)使用 CMake。
关于cmake - 使用 CMake 构建 metallib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52008408/
我想覆盖编译所有项目的默认 Xcode Metal 编译器行为 .metal文件合并成一个 default.metallib而是编译每个 .metal文件到一个单独的 .metallib文件。 但是我
我有一些.metal 文件,我想将它编译成.metallib。整个构建系统都在使用 CMake,我也将使用它来编译 .metal。 要构建 .metallib,我必须使用接下来的两个命令: xcrun
我是一名优秀的程序员,十分优秀!