gpt4 book ai didi

c++ - 每个目标不同的 CMAKE_BUILD_TYPE

转载 作者:行者123 更新时间:2023-12-01 07:38:10 25 4
gpt4 key购买 nike

我正在处理一个非常大的项目,我正在从使用自定义 Makefile 转向使用 cmake,但我仍然缺少使用 Makefile 实现的功能。

项目有很多子目录,每一个都编译成一个静态库,然后链接成最终的可执行文件。

这是一个小例子

src/
lib1/
lib2/
lib3/
main.cpp
CMakeLists.txt

在 CMakeLists.txt 中可能是这样的:
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(lib3)
add_executable(test main.cpp)
target_link_libraries(test PUBLIC lib1 lib2 lib3)

我想调试最终的可执行文件, 但是 我不想用调试符号和没有优化来构建所有静态库,因为这样调试就会变得太慢。

所以我想建 lib2CMAKE_BUILD_TYPE=Releaselib1lib3CMAKE_BUILD_TYPE=Debug .

请记住,实际上有大约 10 个库而不是三个库,我希望能够为其中的每一个以及同时为多个库执行此操作。

有没有办法从主 CMakeLists.txt 做到这一点? ?

我更喜欢的是可以从命令行实现这一点的东西:

cmake -DDEBUG_LIBS={lib1,lib3} /path/to/src
cmake --build .

最佳答案

不要设置CMAKE_BUILD_TYPE将其保留为空白或自定义一个,您可以在其中准确设置您想要的基本标志。然后为所需的库添加额外的调试和优化。我建议创建一个函数(或宏),每个库目标都会调用它来检查它是否出现在 DEBUG_LIBS 中。然后使用正确的值调用 target_compile_options。但是你应该设置为 -DDEBUG_LIBS=lib1;lib3这样列表处理工作。

function(check_debug libname)
if(${libname} IN_LIST DEBUG_LIBS)
target_compile_options(${libname} PRIVATE -g -O0)
endif()
end_function()

关于c++ - 每个目标不同的 CMAKE_BUILD_TYPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60636141/

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