【问题标题】:How to get project root directory inside cmake toolchain file, is it possible?如何在cmake工具链文件中获取项目根目录,可以吗?
【发布时间】:2019-07-31 11:09:09
【问题描述】:

我正在做跨平台构建,并尝试使用 cmake。所以我创建了 my-toolchain-file.cmake ,其中自定义了 c++ 链接器命令。我的裸机员工的链接可以像这样完成:

set(CMAKE_CXX_LINK_EXECUTABLE
      "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> ${SDK_ROOT}/Libraries/${BUILD_TARGET}/${BUILD_TYPE}/memory.a -o <TARGET_BASE>"
      "if not exist <TARGET_BASE> ( mkdir <TARGET_BASE> )"
      "${SDK_ROOT}/Tools/CommandLineTools/Make/MakeBin.exe <TARGET_BASE> <TARGET_BASE>/main"
      "${SDK_ROOT}/Tools/CommandLineTools/Make/MakeManifest.exe --desc ${APP_DESC} --meta ${APP_META} -o <TARGET_BASE>/main.m"
      "copy ${SDK_ROOT_WIN}\\Libraries\\${BUILD_TARGET}\\${BUILD_TYPE}\\syslib.so <TARGET_BASE>\\rtld >NUL"
      "copy ${SDK_ROOT_WIN}\\Libraries\\${BUILD_TARGET}\\${BUILD_TYPE}\\Sdk.so <TARGET_BASE>\\sdk >NUL"
      "${SDK_ROOT}/Tools/SomeTool.exe createimage -o <TARGET_BASE> --desc ${APP_DESC} --meta ${APP_META} --type Exe --program <TARGET_BASE>bin"
      "rmdir /S /Q <TARGET_BASE>"
      "del /Q <TARGET_BASE>"
    )

在自定义链接器命令中,我必须获取相对于项目 CMakeLists.txt 而不是工具链文件的清单文件的路径。如何在工具链文件中设置我的 APP_META 变量?我试试:

set(APP_META "${CMAKE_CURRENT_LIST_DIR}/Application.manifest")

它不起作用(工具链文件和 CMakeLists.txt 在不同的地方)。如何获取cmake工具链文件中的根目录路径?提前致谢!

【问题讨论】:

  • 老实说,这类东西属于项目CMakeLists.txt,而不是工具链描述。应该有某种方法来确定工具链并在必要时添加清单。这只是一个肮脏的黑客。
  • @rubenvb 如您所见,我的链接命令是由几个子命令组合而成的。如果我在 CMakeLists.txt 中创建一些 CUSTOM_MANIFEST var,我如何设法更新 CMAKE_CXX_LINK_EXECUTABLE?
  • 这只是一个普通的POST_BUILD command。此机制允许您指定命令的输出内容,以便不会破坏依赖关系跟踪。
  • @rubenvb 使用 POST_BUILD 我必须将 custom_target 添加到我的每个项目(添加到每个 CMakeLists.txt)中,这一切都是一样的。所以我决定写一次工具链。也许我可以在工具链文件中做到这一点?
  • 您也可以编写functionmacro 并将其填充到您在项目间共享的.cmake 文件中。

标签: c++ cmake


【解决方案1】:

看起来 CMAKE_CURRENT_SOURCE_DIR 适合我。

set(APP_META "${CMAKE_CURRENT_SOURCE_DIR}/Application.manifest")

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多