cmake子目录安装

时间:2015-02-04 10:16:29

标签: cmake install subdirectory

我想使用CMake建立一个新项目。

我的工作目录如下:

CMakeLists.txt
include
   - file1.h
src
   - file1.cpp
   - CMakeLists.txt
tests
   - test1.cpp
   - CMakeLists.txt

主CMakeList.txt如下:

cmake_minimum_required(VERSION 2.8)
project(bench CXX)
include_directories(include)
subdirs(src tests)

src CMakeList.txt是:

add_library(foo SHARED file1.cpp)
install(TARGETS foo DESTINATION lib)

测试CMakeList.txt是:

add_executable(test1 test1.cpp)
target_link_libraries(test1 foo)
install(TARGETS test1 DESTINATION bin)

我希望文件位于

<build_dir>/bin/test1
<build_dir>/lib/libfoo.so

但他们的组织方式如下:

<build_dir>/src/test1
<build_dir>/tests/libfoo.so

我做错了什么?

提前致谢,

1 个答案:

答案 0 :(得分:1)

您正在为安装步骤/构建目标提供说明,该目标独立于<binary_dir>下的构建树。 将CMAKE_INSTALL_PREFIX设置为您选择的文件夹,然后在构建后运行make install(假设在此处生成构建系统)。你告诉cmake,你会发现CMAKE_INSTALL_PREFIX/lib/libfoo.soCMAKE_INSTALL_PREFIX/bin/test1DESTINATION路径始终相对于CMAKE_INSTALL_PREFIX(当然,除非您指定绝对路径)。

构建树中的已编译库和二进制文件(即<build_dir>)将始终反映与位置有关的源树结构;这不能改变,也不是预期的使用方式。 通常有三种不同的东西&#34;:源/构建/安装树。构建树镜像源树结构并包含cmake生成的额外文件和对象。安装&#34;树&#34;是您选择的设置,其中CMAKE_INSTALL_PREFIX是放置库,档案和二进制文件的根目录。您可以完全控制行为(您已经打算做什么!),尽管有合理的默认设置。