cmake external projects命令似乎忽略了INSTALL_DIR

时间:2015-04-18 22:31:33

标签: cmake external-project

首先,我对cmake来说相对较新。我尝试使用cmake构建一个具有单个外部依赖项的项目。我将外部项目的INSTALL_DIR指定为CMAKE_INSTALL_PREFIX,因此它将安装到与父项目相同的位置。但是当我运行make时,它会忽略它并尝试安装到/ usr / local / lib。

这是我的CMakeList.txt:

cmake_minimum_required( VERSION 2.8 )
include( ExternalProject )
project( capture )
add_library( capture SHARED capture.cc )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )

ExternalProject_Add( proj_exceptions 
    GIT_REPOSITORY /home/user/workspace/exceptions 
    INSTALL_DIR ${CMAKE_INSTALL_PREFIX} 
)

add_library( exceptions SHARED IMPORTED )
set_property( TARGET exceptions 
    PROPERTY IMPORTED_LOCATION ${CMAKE_INSTALL_PREFIX}/lib/libexceptions.so 
)
add_dependencies( exceptions proj_exceptions )
include_directories( ${CMAKE_INSTALL_PREFIX}/include )
target_link_libraries( capture exceptions )
install( TARGETS capture DESTINATION lib )
install( FILES capture.h DESTINATION include )

外部项目的CMakeLists.txt如下所示:

cmake_minimum_required( VERSION 2.8 )
project( exceptions )
add_library( exceptions SHARED exceptions.cc )
install( TARGETS exceptions DESTINATION lib )
install( FILES exceptions.hh DESTINATION include )

它克隆并构建外部项目就好了,但它在安装步骤中窒息:

Install the project...
-- Install configuration: ""
-- Installing: /usr/local/lib/libexceptions.so
CMake Error at cmake_install.cmake:42 (file):
  file INSTALL cannot copy file
  "/home/user/workspace/capture/build/proj_exceptions-prefix/src/proj_exceptions-build/libexceptions.so"
  to "/usr/local/lib/libexceptions.so".
Makefile:66: recipe for target 'install' failed

如您所见,安装配置为空。查看外部项目的生成配置,我在cmake_install.cmake中找到了这个:

if(NOT DEFINED CMAKE_INSTALL_PREFIX)
  set(CMAKE_INSTALL_PREFIX "/usr/local")
endif()

因此,似乎将INSTALL_DIR传递给ExternalProject_Add并不会设置安装前缀。安装步骤成功,如果我改为使用:

ExternalProject_Add( proj_exceptions 
    GIT_REPOSITORY /home/djones/workspace/exceptions 
    CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}" 
)     

那么INSTALL_DIR的目的是什么呢?

1 个答案:

答案 0 :(得分:5)

你出于INSTALL_DIR的目的是正确的,但你可能错过了一些步骤。

根据cmake 2.8 doc about external project

  

安装步骤

     

INSTALL_DIR位于调用项目的下方   二进制目录。使用INSTALL_DIR指定其他位置。   请注意,除了设置INSTALL_DIR之外,您还必须通过   -DCMAKE_INSTALL_PREFIX或 - 对CMake或configure命令的前缀。它不会在配置步骤中自动使用,因为并非全部   项目遵循这一惯例。

     

# [INSTALL_DIR dir]

     

您可以参考configure命令中的安装目录   例如:

CONFIGURE_COMMAND SOURCE_DIR/configure --prefix=INSTALL_DIR

 # [INSTALL_COMMAND cmd...]
     

基于CMake的项目使用'cmake - build'来构建安装目标。   其他项目使用'make install'。使用INSTALL_COMMAND进行自定义   安装步骤。使用INSTALL_COMMAND“”省略安装步骤。该   install命令在工作目录设置为的情况下执行   

因此,请尝试更新您的cmake命令,或使用自定义INSTALL_COMMAND功能。