我有以下项目结构
MyProject
CMakeLists.txt
\SubProject1
\SubProject1\CMakeLists.txt
\SubProject2
\SubProject2\CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
编译二进制文件工作正常,我只是使用ADD_SUBDIRECTORY(SubProject1)等。
每个子项目的配置基本上是SET(EXECUTABLE_OUTPUT_PATH ../Bin)
因此,我从 MyProject Dir 创建一个 Build dir
mkdir Build
cd Build
cmake ..
make install
Run Code Online (Sandbox Code Playgroud)
我的二进制文件现在位于MyProject/Build/Bin/binaryname
但安装目标失败
当我尝试使用cmakeDEB 安装程序时
INSTALL(FILES Bin/binaryname DESTINATION /opt/myproject/bin)
Run Code Online (Sandbox Code Playgroud)
它失败了,因为cmake搜索我的项目的根目录中的路径(由于我cmake ..最有可能使用)
所以cmake尝试使用MyProject/Bin/binaryname
Bin/binaryname而不是在当前工作目录中查找
我该如何解决?../Bin/binary等不起作用 - 我不想硬编码Build/Bin/binary-cmake因为要构建的目录基本上可以自由选择
编辑:这是一个精简的 SubProject1CMakeList.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
file(GLOB_RECURSE SOURCES "Source/*.cpp")
INCLUDE_DIRECTORIES("Include")
get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
ADD_EXECUTABLE(mybinary ${SOURCES})
IF(UNIX)
ADD_DEFINITIONS(-fPIC)
ENDIF(UNIX)
Run Code Online (Sandbox Code Playgroud)
CMake 不支持从子目录中定义的目标进行安装。
如果我想从构建目录添加文件,我必须更改
INSTALL(FILES Bin/binaryname DESTINATION /opt/myproject/bin)
Run Code Online (Sandbox Code Playgroud)
到
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/Bin/binaryname DESTINATION /opt/myproject/bin)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18998 次 |
| 最近记录: |