我正在运行命令" 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是"〜/ Desktop / Geant / geant4.10.04-install",但由于make install命令能够生成geant4.10.04-将目录安装在正确的位置,我不认为这是问题所在。
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 /"似乎解决了这个问题
答案 0 :(得分:0)
使用环境变量 $ENV{HOME}
比硬编码 /home/<user>
更可取,因为它将使用正确的顶级目录(即 /Users
而不是 /home
在 macOS 上,如果您'正在执行跨平台构建),它会自动扩展以包含调用 cmake
的用户的姓名,使其更适合协作环境。
此外,使用 $ENV{HOME}
应该使 sudo
前面的 make install
变得不必要,但取决于变量何时展开,$ENV{HOME}
可能指的是用户调用 { {1}} 或调用 cmake
的用户(即 make install
,如果您使用 /root
),因此您的里程可能会有所不同。
编辑:我找到了解决这个问题的方法,因为由于使用 sudo
,我得到了相同的“CMake 错误:文件安装目标不是目录”输出。出于某些目的,CMake 似乎真的不喜欢 ~
。 ~
与 $ENV{HOME}
具有完全相同的值,只是当您尝试在 ~
中使用它时 CMake 不会吓坏。