如何在cmake工具链文件中获取项目根目录,可能吗?

时间:2019-07-31 11:09:09

标签: c++ cmake

我正在做跨平台构建,并尝试使用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工具链文件中的根目录路径?预先感谢!

1 个答案:

答案 0 :(得分:0)

看起来CMAKE_CURRENT_SOURCE_DIR对我有用。

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