首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >add_custom_command取决于另一个add_custom_command

add_custom_command取决于另一个add_custom_command
EN

Stack Overflow用户
提问于 2016-12-02 10:39:22
回答 1查看 433关注 0票数 1

我们有两个add_custom_command子句,其中一个依赖于另一个:

  1. 第一个命令使用.osl编译器将.oso源文件编译为.oso对象文件: set (oslc ${PROJECT_SOURCE_DIR}/sandbox/bin/oslc) add_custom_command (输出"${oso_dir}/${oso_filename}“命令${CMAKE_COMMAND} -E make_directory "${oso_dir}”命令"${oslc}“-I"${osl_include_path}”-o "${oso_dir}/${oso_filename}“"${osl_src_abs}”主_DEPENDENCY ${osl_src_abs}取决于${ ${osl_src_abs} }${osl_src_abs} "${oslc}“) 注意对${oslc}的依赖:我们显式地依赖于${oslc},因为我们需要在执行这个命令之前确保它的存在。
  2. 第二个命令"builds“(实际上是部署)将oslc编译器复制到其他地方: add_custom_command (输出" ${PROJECT_SOURCE_DIR}/sandbox/bin/ oslc“命令${CMAKE_COMMAND} -E copy ${OSL_COMPILER} ${PROJECT_SOURCE_DIR}/sandbox/bin/)

在此设置工作时,其副作用是两个命令都是are执行(第二个命令后面跟着第一个命令),即使.osl输入文件没有被修改。

这种行为似乎是Windows特有的。它在Linux上似乎运行得很好。

如果从第一个命令中删除了对${oslc}的依赖,那么即使在缺少oslc编译器时,也不再执行第二个命令;但另一方面,.osl文件现在只有在自上次构建后更改时才重新编译(只要存在oslc )。

这个设置有什么问题吗?如果没有,那么结合这两个特性的正确方法是什么:只在上次构建后对.osl文件进行编译,在第一步不存在时“构建”oslc编译器(第一步所要求的)?

实际的CMake脚本可以在GitHub上使用:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-02 15:41:47

一个简单的解决方案,至少对于Windows,是将第二个命令更改为

代码语言:javascript
复制
add_custom_command (
    TARGET appleseed.shaders
    PRE_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy ${OSL_COMPILER} ${PROJECT_SOURCE_DIR}/sandbox/bin/
)

(注意PRE_BUILD关键字)

并从第一个命令中移除对${oslc}的显式依赖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40930224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档