CMake错误:文件安装目标不是一个目录。

3

我正在运行命令“sudo make install”,相关的cmake_install.cmake文件位于底部。我收到的确切错误消息是:

CMake Error at cmake_install.cmake:36 (file):
  file INSTALL destination:
  ~/Desktop/Geant/geant4.10.04-install/share/Geant4-10.4.0/geant4make is not
  a directory.


Makefile:104: recipe for target 'install' failed
make: *** [install] Error 1

这让我感到困惑,因为我可以导航到该目录,它存在,并且更重要的是,在此安装期间创建了该目录,因此make install正在创建此目录,然后说它不存在...
另外,当我最初执行cmake命令时,我的CMAKE_INSTALL_PREFIX是“〜/桌面/Geant/geant4.10.04-install”,但由于make install命令能够在正确的位置创建geant4.10.04-install目录,所以我认为这不是问题。
cmake_install.cmake文件的前50行(如果需要,我可以发布其余部分...):
# Install script for directory: /home/kagnew/Desktop/Geant/geant4.10.04

# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
  set(CMAKE_INSTALL_PREFIX "~/Desktop/Geant/geant4.10.04-install")
endif()
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")

# Set the install configuration name.
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
  if(BUILD_TYPE)
    string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
  else()
    set(CMAKE_INSTALL_CONFIG_NAME "Release")
  endif()
  message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
endif()

# Set the component getting installed.
if(NOT CMAKE_INSTALL_COMPONENT)
  if(COMPONENT)
    message(STATUS "Install component: \"${COMPONENT}\"")
    set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
  else()
    set(CMAKE_INSTALL_COMPONENT)
  endif()
endif()

# Install shared libraries without execute permission?
if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
  set(CMAKE_INSTALL_SO_NO_EXE "1")
endif()

if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Development")
  file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/Geant4-10.4.0/geant4make" TYPE FILE MESSAGE_LAZY PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE FILES "/home/kagnew/Desktop/Geant/geant4-build/InstallTreeFiles/geant4make.sh")
endif()

更新:正如Tsyvarev建议的那样,将我的前缀路径开头从“~”改为“/home/user/”似乎已经解决了问题。


3
符号~不适用于CMAKE_INSTALL_PREFIX。命令sudo make installroot环境下运行脚本,因此~代表的是/root而不是/home/username - Tsyvarev
这个更改似乎已经解决了问题。非常感谢。 - Kelly Agnew
在Stack Overflow上,我们倾向于将“问题”与“解决方案”分开维护。您的“更新”部分是一个“解决方案”,并不适合于“问题帖子”。但是,您自己回答问题是完全可以的。 - Tsyvarev
1个回答

1
使用环境变量$ENV{HOME}比硬编码/home/<user>更好,因为它将使用正确的顶级目录(即macOS上的/Users而不是/home,如果您正在进行跨平台构建),并且它将自动扩展以包括调用cmake的用户的名称,使其更适合协作环境。
此外,使用$ENV{HOME}应该使make install前面的sudo不必要,但是取决于何时扩展变量,$ENV{HOME}可能指调用cmake的用户或调用make install的用户(即如果您使用sudo,则为/root),因此您的表现可能会有所不同。

编辑:我之所以找到这个问题,是因为我由于使用而得到了相同的“CMake错误:文件INSTALL目标不是目录”输出。对于某些目的来说,CMake似乎真的不喜欢$ENV{HOME}完全相同,只是当您尝试在CMAKE_INSTALL_PREFIX中使用它时,CMake不会出现异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接