cmake文件(COPY ...)导致复制旧文件

时间:2014-10-22 07:27:39

标签: c++ cmake

我正在尝试设置cmake将头文件复制到特定位置,这样我就可以使用一个中心位置,当我使用库时可以访问头文件。我正在使用最小的代码集来测试它。目录结构如下所示:

src/
├── CMakeLists.txt
├── codepack
│   ├── CMakeLists.txt
│   ├── package.xml
│   └── src
│       └── code.cpp
└── libpack
    ├── CMakeLists.txt
    ├── package.xml
    └── src
        ├── lib.cpp
        ├── lib.hpp
        ├── test.hpp
        └── tt
            ├── tt.cpp
            └── tt.hpp

libpack创建了两个库ttlibfunk,然后由codepack使用。下面的cmake代码位于libpack CMakeLists中,并将保留目录结构的头文件复制到include的CMakeLists中引用的codepack目录。 / p>

到目前为止,我有以下代码,它似乎有效,但在测试时,行为并不像预期的那样。

# find all header files in the source directory and subdirectories, and group them
file(GLOB_RECURSE headers src/*.hpp)

# remove previous versions of files (not sure how to replace only if modified)
file(REMOVE_RECURSE ${CATKIN_DEVEL_PREFIX}/include/${PROJECT_NAME})
# go through each of the matched files
foreach(header ${headers})
  # replace the path, up to the point of the src directory, so that
  # we end up with just the path below the src directory
  string(REGEX REPLACE ".*${CMAKE_CURRENT_SOURCE_DIR}\\/src" "" belowsrc ${header})
  # match directories in the path
  # i.e. /foo/bar/item.hpp -> /foo/bar/
  string(REGEX MATCH ".*\\/" DIR ${belowsrc})
  # copy the header file to the include directory in catkin_ws/devel,
  # under the package name, and preserving subdirectory structure
  file(COPY ${header} DESTINATION ${CATKIN_DEVEL_PREFIX}/include/${PROJECT_NAME}${DIR})
endforeach(header)

最初我跳过file(REMOVE_RECURSE..)步骤,因为我假设file(COPY)可以这样工作,我可以期望将最新版本的标题复制到include目录。 tt.hpp文件具有以下结构:

#include <iostream>

class tt {
public:
  static void print();
};

如果我将文件置于此状态并进行编译,则一切都按预期工作。但是,如果我删除public:声明,我没有看到我期望的错误('static void tt :: print()'是私有的),除非我手动删除include目录到我正在复制标题,然后修改其中一个CMakeLists文件,我想这会产生一个新的编译。

我在这里做错了什么?

编辑:我已经检查了文件(REMOVE_RECURSIVE ...),只是为了确保正确删除目录,并且据我所知。

0 个答案:

没有答案