gpt4 book ai didi

CMake,多个目标(asan tsan ..)而无需重新编译所有内容

转载 作者:行者123 更新时间:2023-12-01 09:53:14 24 4
gpt4 key购买 nike

目标我想定义几个目标:

  • make msan:使用带有内存清理器的 clang 编译代码
  • make tsan:使用 clang 和 thread sanitizer 编译代码
  • make : 使用 gcc 编译代码

并且能够在它们之间轻松切换。例如,我不希望每次切换时都重建我的所有对象,(当然,我必须在第一次这样做,但稍后如果我修改一个文件并且我做了 make 然后 make asan 它应该只重新编译这个文件对于每个目标)

到目前为止我做了什么

我已经设法从根目录创建了这些目标,但每次我都必须执行 make clean 并重新编译。

option(CLANG_MSAN "Enable Clang memory sanitizer" OFF)
if (CLANG_MSAN)
set (CMAKE_CXX_FLAGS "-g -fsanitize=address -fno-omit-frame-pointer")
endif()

add_custom_target(asan
COMMAND ${CMAKE_COMMAND}
-DCLANG_MSAN=ON
-DCMAKE_CXX_COMPILER=clang++
-DCMAKE_C_COMPILER=clang)

有可能用 CMake 做这样的事情吗?

最佳答案

是的,但是使用多个构建目录:

  • 为每个配置创建一个构建目录。
  • 使用您需要的参数在您的构建目录中配置您的项目。例如。 cmake -DCMAKE_COMPILER=clang -DCMAKE_C_FLAGS="-fsanitize=thread".. 或您问题中的内容。
  • 如果你切换构建目录,你就改变了你的设置。

这意味着外源构建,无论如何 CMake 都鼓励这种构建。

关于CMake,多个目标(asan tsan ..)而无需重新编译所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33799831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com