我想使用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
我做错了什么?
提前致谢,
答案 0 :(得分:1)
您正在为安装步骤/构建目标提供说明,该目标独立于<binary_dir>
下的构建树。
将CMAKE_INSTALL_PREFIX
设置为您选择的文件夹,然后在构建后运行make install
(假设在此处生成构建系统)。你告诉cmake,你会发现CMAKE_INSTALL_PREFIX/lib/libfoo.so
和CMAKE_INSTALL_PREFIX/bin/test1
。 DESTINATION
路径始终相对于CMAKE_INSTALL_PREFIX
(当然,除非您指定绝对路径)。
构建树中的已编译库和二进制文件(即<build_dir>
)将始终反映与位置有关的源树结构;这不能改变,也不是预期的使用方式。
通常有三种不同的东西&#34;:源/构建/安装树。构建树镜像源树结构并包含cmake生成的额外文件和对象。安装&#34;树&#34;是您选择的设置,其中CMAKE_INSTALL_PREFIX
是放置库,档案和二进制文件的根目录。您可以完全控制行为(您已经打算做什么!),尽管有合理的默认设置。