【问题标题】:CMAKE add_custom_command still confusingCMAKE add_custom_command 仍然令人困惑
【发布时间】:2018-05-06 01:08:03
【问题描述】:

我查看了使用 cmake 的 add_custom_command 的响应,但无法让它在 android studio 中工作。运行时找不到目标。

add_custom_command( TARGET b.c.o
                    POST_BUILD
                    file(RENAME ${CMAKE_HOME_DIRECTORY}/newfolder/customer.txt ${CMAKE_HOME_DIRECTORY}/newfolder/used_customer.txt)
                  )

我得到以下信息:

CMake Error at CMakeLists.txt:73 (add_custom_command):
  No TARGET ')' has been created in this directory.
-- Configuring incomplete, errors occurred!
See also "C:/Documents/Android_files/local_app/BApp/.externalNativeBuild/cmake/debug/x86_64/CMakeFiles/CMakeOutput.log".

FAILURE:构建失败并出现异常。

出了什么问题:

A problem occurred configuring project ':BApp'.
    > executing external native build for cmake C:\Documents\Android_files\local_app\BApp\CMakeLists.txt

Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

通过https://help.gradle.org获得更多帮助

32 秒后构建失败

每次运行时似乎都找不到目标文件。 你能就这件事提供一些帮助吗?

【问题讨论】:

    标签: android cmake cmake-custom-command


    【解决方案1】:

    您不能在 add_custom_command 中嵌套 cmake 命令(file 是 cmake 命令)。 add_custom_command 的命令在终端中执行,而不是从 cmake 脚本内部执行。 您可以在 linux 中使用mv 重命名文件:

    add_custom_command(TARGET b.c.o POST_BUILD COMMAND mv ${CMAKE_HOME_DIRECTORY}/newfolder/customer.txt ${CMAKE_HOME_DIRECTORY}/newfolder/used_customer.txt)
    

    您可以在 windows 中使用rename 重命名文件:

    add_custom_command(TARGET b.c.o POST_BUILD COMMAND rename ${CMAKE_HOME_DIRECTORY}/newfolder/customer.txt ${CMAKE_HOME_DIRECTORY}/newfolder/used_customer.txt)
    

    你可以使用cmake命令模式(可能是最好的选择):

    add_custom_command(TARGET b.c.o POST_BUILD COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_HOME_DIRECTORY}/newfolder/customer.txt ${CMAKE_HOME_DIRECTORY}/newfolder/used_customer.txt)
    

    或者你可以把cmake命令:

      file(RENAME ${CMAKE_HOME_DIRECTORY}/newfolder/customer.txt ${CMAKE_HOME_DIRECTORY}/newfolder/used_customer.txt)
    

    在一个名为 custom_command.cmake 的单独文件中执行:

       add_custom_command(TARGET b.c.o POST_BUILD COMMAND ${CMAKE_COMMAND} -P custom_command.cmake -D CMAKE_HOME_DIRECTORY=${CMAKE_HOME_DIRECTORY} )
    

    【讨论】:

    • 谢谢卡米尔。我仍然无法找到目标。 cmake 的问题在于不存在全面的文档。或者至少我什么都没看到。如果能获得一本真正的用户手册,那就太好了。我的目标位于 cmake 对象文件夹中,但使用路径名并不能解决问题。如何告诉 cmake 如何找到目标?
    • 你可以在网上找到cmake文档here(记得在左边选择正确的cmake版本)。
    • cmake 对象文件夹?你的意思是CMAKE_CURRENT_BINARY_DIR?查看cmake usefull variables
    • 当我运行重命名命令时,它会创建一个新文件而不是覆盖现有文件。我认为这是因为没有使用文件完成构建并阻止删除原始文件。如果是这种情况,我如何告诉它在所有构建完成后删除?
    • POST_BUILD 命令最后运行,毕竟已经构建。也许试试add_dependencies(b.c.o. <build you want to complete before running b.c.o.>)。要删除文件,您可以在第一个命令后添加del 第二个COMMAND del <file>,或尝试使用move 命令。
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2022-01-17
    • 1970-01-01
    • 2018-02-26
    • 2012-05-15
    相关资源
    最近更新 更多