使用CMake

时间:2016-05-26 08:24:48

标签: windows cmake gcov gcovr

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

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

1 个答案:

答案 0 :(得分:0)

如果您未在项目中使用CMAKE_RUNTIME_OUTPUT_PATH,则会在包含可执行文件的目录中创建.gcda.gcno个文件,因此您可以使用{{计算此目录1}} generator-expression

因为您知道源文件的名称,所以您可以计算所有与gcov相关的文件的绝对路径,并在没有$<TARGET_FILE_DIR:tgt>的情况下生成适当的复制命令。

另一种方法可能是自己编写类似xargs的程序/脚本,随项目一起发送,并在find中使用它。所以

  

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

不会有问题。