oro*_*hen 8 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 )
Run Code Online (Sandbox Code Playgroud)
外部项目的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 )
Run Code Online (Sandbox Code Playgroud)
它克隆并构建外部项目就好了,但它在安装步骤中窒息:
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
Run Code Online (Sandbox Code Playgroud)
如您所见,安装配置为空.查看外部项目的生成配置,我在cmake_install.cmake中找到了:
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "/usr/local")
endif()
Run Code Online (Sandbox Code Playgroud)
因此,似乎将INSTALL_DIR传递给ExternalProject_Add不会设置安装前缀.安装步骤成功,如果我改为使用:
ExternalProject_Add( proj_exceptions
GIT_REPOSITORY /home/djones/workspace/exceptions
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}"
)
Run Code Online (Sandbox Code Playgroud)
那么INSTALL_DIR的目的是什么呢?
小智 5
您对INSTALL_DIR的使用是正确的,但是您可能错过了一些步骤。
安装步骤
INSTALL_DIR在调用项目的二进制目录下。使用INSTALL_DIR指定其他位置。请注意,除了设置INSTALL_DIR外,还必须将-DCMAKE_INSTALL_PREFIX或--prefix传递给CMake或configure命令。由于并非所有项目都遵循此约定,因此在配置步骤中不会自动使用它。
# [INSTALL_DIR dir]您可以在configure命令中引用安装目录,例如:
Run Code Online (Sandbox Code Playgroud)CONFIGURE_COMMAND SOURCE_DIR/configure --prefix=INSTALL_DIR # [INSTALL_COMMAND cmd...]基于CMake的项目使用'cmake--build'来构建安装目标。其他项目使用“ make install”。使用INSTALL_COMMAND定制安装步骤。使用INSTALL_COMMAND“”省略安装步骤。install命令的工作目录设置为。
因此,请尝试更新cmake命令,或使用自定义的INSTALL_COMMAND功能。