我目前正尝试使用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中解决这个问题,而不是指示所有开发人员安装不同的工具。
答案 0 :(得分:0)
如果您未在项目中使用CMAKE_RUNTIME_OUTPUT_PATH
,则会在包含可执行文件的目录中创建.gcda
和.gcno
个文件,因此您可以使用{{计算此目录1}} generator-expression。
因为您知道源文件的名称,所以您可以计算所有与gcov相关的文件的绝对路径,并在没有$<TARGET_FILE_DIR:tgt>
的情况下生成适当的复制命令。
另一种方法可能是自己编写类似xargs的程序/脚本,随项目一起发送,并在find
中使用它。所以
...但我宁愿在CMake中解决这个问题,而不是指示所有开发人员安装不同的工具。
不会有问题。