为什么 cmake 生成带有 debug_info 的二进制文件而不是剥离

why is cmake producing a binary with debug_info and not stripped

为什么 cmake 生成带有 debug_info 的二进制文件而不是剥离?

这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 3.22)

# project name
project(c-program)

set(CMAKE_C_COMPILER "/usr/bin/gcc")
set(CMAKE_C_STANDARD "90")
set(CMAKE_C_STANDARD_REQUIRED true)
set(CMAKE_C_FLAGS "-ansi -Wall")
set(CMAKE_C_FLAGS_DEBUG "-g3 -ggdb3")
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")

add_executable(c-program c-program.c)

我从项目根文件夹这样构建

$ cmake -S . -B build/release -DCMAKE_BUILD_TYPE=Release

$ cmake --build build/release

当运行

$ file build/release/c-program

我得到

build/release/c-program: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-x86_64.so.1, with debug_info, not stripped

我对 debug/release 构建应该如何工作感到困惑,cmake 教程指南或文档或其他在线内容都无法帮助我弄清楚为什么会这样

CMakeLists.txt 中设置标志存在一些问题,因此添加和使用工具链文件有帮助,并在工具链文件中设置适当的 CMAKE_<LANG>_FLAGS_<CONFIG>_INIT 变量。此外,链接器正在添加调试信息。将 -s 标志添加到 cmake 发布标志,并将 -Wl,--strip-debug 添加到链接器标志是我一直在寻找的

这是我最后的 CMakeLists.txttoolchain 文件

#CMakeLists.txt
cmake_minimum_required(VERSION 3.22)

# set toolchain file
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/toolchain.cmake"
    CACHE PATH "Path to the desired toolchain file.")

# project name
project(c-program C)

add_executable(c-program c-program.c)
# toolchain.cmake
# CMake toolchain file

# c compiler and standard
set(CMAKE_C_COMPILER "/usr/bin/gcc")
set(CMAKE_C_STANDARD "90")
set(CMAKE_C_STANDARD_REQUIRED YES)

# linker flags
set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--strip-debug")

# cflags
set(CMAKE_C_FLAGS_INIT "-ansi -Wall")

# cflags for debug build
set(CMAKE_C_FLAGS_DEBUG_INIT "-g3 -ggdb3")

# cflags for release build
set(CMAKE_C_FLAGS_RELEASE_INIT "-O3 -DNDEBUG -s")