【发布时间】:2016-09-24 03:15:17
【问题描述】:
我目前正在尝试使用 MinGW 在 Windows 上使用 CMake 中的 Gcov 和 Gcovr。 使用正确的标志编译文件就像一个魅力。 但是,CLion 使用 Gcov 无法理解的源外构建。
在 Linux 上,我使用以下命令将所有 *.gcda 和 *.gcno 从 CMAKE_BINARY_DIR 子文件夹复制到 CMAKE_SOURCE_DIR:
set(GCOV_DATA_DIR "${CMAKE_SOURCE_DIR}/gcov_data")
add_custom_target(prepare_coverage
# Copy necessary files to CMAKE_SOURCE_DIR
COMMAND ${CMAKE_COMMAND} -E make_directory ${GCOV_DATA_DIR}
COMMAND find ${CMAKE_BINARY_DIR} -name \"*.gcda\" -o -name \"*.gcno\" | xargs -l -i cp {} "${GCOV_DATA_DIR}"
)
请注意,测试二进制文件在CMAKE_BINARY_DIR 中执行。
这工作得很好,之后我可以用一些额外的标志调用 Gcovr 来获得一份不错的报告。
但是,在 Windows 上,我没有 xargs(我已经很惊讶 find 确实有效)。
为了使这个 CMake 命令与平台无关,我正在寻找一种方法让 CMake 在构建期间查找并复制/移动文件(类似于制作目录)。
谁能告诉我这是否可行以及我应该怎么做? 当然,我总是可以安装额外的程序或脚本,但我宁愿在 CMake 中解决这个问题,而不必指示所有开发人员安装不同的工具。
【问题讨论】:
-
正如我提到的,我正在使用 MinGW。我还安装了 MSYS 软件包。
-
正如您在我对已接受答案的评论中看到的那样,我现在有一个涉及标准 Windows 工具的解决方案。
-
问题已经回答了。 “随你的项目一起交付”是我使用的解决方案。
-
也许这个问题可以用更干净的方式解决。有一个guide on cmake website,还有这个very similar question。