CMake使用--prefix指定安装路径报错及不生效问题咨询
问题原因排查
命令1报错原因
cmake --build命令的--target参数仅接受预定义的构建目标名(如install、clean、自定义的目标名),不能填写安装路径。你把路径放在--target后,CMake会将路径当作目标名查找,自然触发未知目标错误。
命令2未写入指定prefix的原因
这是你的CMakeLists.txt配置错误导致--prefix参数完全失效:
- CMake的
install指令中DESTINATION应该填写相对路径,实际安装路径会自动拼接CMAKE_INSTALL_PREFIX(也就是你--prefix传入的值)。你直接填写了绝对路径作为DESTINATION参数,CMake会直接忽略CMAKE_INSTALL_PREFIX,固定安装到写死的路径。 - 你直接执行
set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/bin)没有加默认值判断,会强制覆盖用户传入的前缀参数,即使正确传了--prefix也会被这个配置覆盖。 - 头文件安装的
DESTINATION也写死了绝对路径${PROJECT_BINARY_DIR}/bin/include,同样会忽略前缀参数。
可行解决方案
第一步:修改CMakeLists.txt
替换原有对应代码段即可:
# 替换原有set(CMAKE_INSTALL_PREFIX...)行,仅当用户未指定安装路径时使用默认值 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/bin CACHE PATH "默认安装路径" FORCE) endif() # 替换原有install(TARGETS ncurses...)行,DESTINATION填相对路径 # 若需要安装到prefix下的bin目录,可改为DESTINATION bin install(TARGETS ncurses DESTINATION .) # 替换原有头文件安装代码段,DESTINATION填相对路径 install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h" DESTINATION include ) # 注意:如果MathFunctions子目录下也有install指令,需要同步将DESTINATION改为相对路径
第二步:使用正确的执行命令
方式1:配置时指定安装路径
# 若之前已经构建过,先删除build目录下的所有内容再执行 cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/home/mic/Ncurses # 构建并安装 cmake --build build --target install -j10
方式2:安装时指定前缀
# 先正常构建 cmake --build build -j10 # 安装时指定前缀 cmake --install build --prefix /home/mic/Ncurses
执行完成后,所有文件就会正常写入你指定的/home/mic/Ncurses目录下。
内容的提问来源于stack exchange,提问作者Mic Maci
相关产品推荐
相关产品推荐

