在toolchain.cmake中设置CMAKE_INSTALL_PREFIX

时间:2017-06-25 14:56:41

标签: cmake cross-platform

我为我正在构建的平台定义了toolchain.cmake,并在其中指定了我希望安装文件的位置。但是,当我运行make install时,文件会转到默认位置/usr/....。我的toolchain.cmake设置如下:

# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)

# specify the cross compiler
SET(CMAKE_C_COMPILER   /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/bin/i686-aldebaran-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/bin/i686-aldebaran-linux-gnu-g++)

# where is the target environment 
SET(CMAKE_FIND_ROOT_PATH /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot)
SET(CMAKE_SYSROOT /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
SET(THREADS_PTHREAD_ARG 1)
SET(CMAKE_INSTALL_FULL_INCLUDEDIR /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot/usr/local/include)
SET(CMAKE_INSTALL_FULL_LIBDIR /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot/usr/local/lib)
SET(CMAKE_INSTALL_FULL_MANDIR /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot/share/man)
SET(CMAKE_INSTALL_PREFIX /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot)
SET(CMAKE_STAGING_PREFIX /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot)

可以看出,我在设置路径时已经过度了,但是没有一个能够工作。为了让make install将文件放在正确的位置,我必须在cmake命令中传递-DCMAKE_INSTALL_PREFIX=<path>,如下所示:

cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=~/myScripts/Toolchain-Naoqi.2.1.4.13.cmake -DCMAKE_INSTALL_PREFIX=/usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot ..

最好不要在toolchain.cmake中设置路径,因为它适用于我正在构建的所有项目。

2 个答案:

答案 0 :(得分:0)

您的路径被覆盖的原因是在执行此Toolchain文件后调用project()。除其他事项外,project()函数会将CMAKE_INSTALL_PREFIX设置为某个默认值。

优良作法CMAKE_INSTALL_PREFIX中指定CMakeLists.txt,以确保跨平台兼容性。例如,您的方法会阻止使用非类Unix系统的人使用您的文件。

如果您真的想继续并在代码中指定它,我会看到两个选项:

  • 在项目的CMAKE_INSTALL_PREFIX之一中硬编码CMakeLists.txt,即在调用project()之后
  • 提供定制的平台&#39;文件位于some_folder/Platform/<My_Platform>.cmake,并将some_folder添加到CMAKE_MODULE_PATH。在此平台文件中,您可以指定CMAKE_INSTALL_PREFIX,这样您就不需要破坏其他CMakeLists.txt(我的假设是您只需要此特定平台的此安装文件夹)。

答案 1 :(得分:0)

看起来这个问题是由CMake本身的一个错误引起的,它基于他们以前的错误跟踪器中的旧bug report,在没有解决问题的情况下关闭了。

问题总结为

  

在CMAKE_TOOLCHAIN_FILE文件中指定CMAKE_INSTALL_PREFIX没有   效果

准确描述了您遇到的问题。

对于它的价值,当我尝试使用工具链文件与CMake v3.5.1进行交叉编译时,我也会遇到同样的问题,所以我认为这个问题没有得到解决。

可能会找到CMake当前错误跟踪器中的迁移错误报告here

除了您已确定涉及在安装命令中设置CMAKE_INSTALL_PREFIX内联的变通方法之外,通过向迁移的错误中的对话添加您的评论,请求CMake团队修复此错误,可以达到更长久的解决方案。报告。