0

我目前正在尝试使用 MinGW 在 Windows 上使用 CMake 中的 Gcov 和 Gcovr。使用正确的标志编译文件就像一个魅力。但是,CLion 使用 Gcov 不理解的源代码外构建。

在 Linux 上,我使用以下内容将所有*.gcda和复制*.gcnoCMAKE_SOURCE_DIRfromCMAKE_BINARY_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 中解决这个问题,而不必指示所有开发人员安装不同的工具。

4

1 回答 1

0

如果您不在CMAKE_RUNTIME_OUTPUT_PATH项目中使用,则在具有可执行文件的目录.gcda中创建文件,因此您可以使用generator-expression.gcno计算该目录。$<TARGET_FILE_DIR:tgt>

因为您知道源文件的名称,所以您可以计算所有 gcov 相关文件的绝对路径,并生成适当的复制命令,而无需find.

另一种方法可能是自己编写类似 xargs 的程序/脚本,将其与您的项目一起发布,然后在COMMAND. 所以

...但我宁愿在 CMake 中解决这个问题,而不必指示所有开发人员安装不同的工具。

不会有问题。

于 2016-05-26T11:34:09.110 回答