我为我正在构建的平台定义了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
中设置路径,因为它适用于我正在构建的所有项目。
答案 0 :(得分:0)
您的路径被覆盖的原因是在执行此Toolchain文件后调用project()
。除其他事项外,project()
函数会将CMAKE_INSTALL_PREFIX
设置为某个默认值。
优良作法不在CMAKE_INSTALL_PREFIX
中指定CMakeLists.txt
,以确保跨平台兼容性。例如,您的方法会阻止使用非类Unix系统的人使用您的文件。
如果您真的想继续并在代码中指定它,我会看到两个选项:
CMAKE_INSTALL_PREFIX
之一中硬编码CMakeLists.txt
,即在调用project()
之后。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团队修复此错误,可以达到更长久的解决方案。报告。