CMake make install 失败并显示“文件安装找不到 <myfile>”

Ste*_*eve 7 cmake

我有以下项目结构

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)

Ste*_*eve 5

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)