c++ - 在链接静态库之前让cmake修改目标文件

标签 c++ cmake

我真的是 cmake 的新手,但我想看看是否有办法在将 cmake 链接到静态库之前修改 cmake 制作的目标文件。我的 cmake 文件现在看起来像这样:

set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -g")    
set(SOURCES
    file1.cpp 
    file2.cpp
)
add_library(my_proj STATIC ${SOURCES})
add_custom_command(
    TARGET my_proj 
    PRE_LINK
    COMMAND <run objcopy on some of the object files here>
    COMMENT " Running PRE_LINK action "
)

我没有看到使用 cmake 获取目标文件名的好方法,这样我就可以遍历其中的一些文件并从一些文件中删除调试符号,同时为其他对象保留调试符号。这将允许我创建一个较小的静态库,其中只为我需要的对象添加符号。是否有任何 cmake 变量可以为我提供所有目标文件名,以便我可以有选择地调用 objcopy 并删除某些目标文件的调试符号?

最佳答案

据我所知,我认为你能做的最好的事情就是指定一个命令在整个目标上运行,而不是只在目标的一些目标文件上运行。例如,要手动剥离静态库,您可以执行以下操作:

add_library(my_proj STATIC ${SOURCES})
add_custom_command(TARGET my_proj POST_BUILD
    COMMAND objcopy -S $<TARGET_FILE:my_proj>
    COMMENT "Stripping my_proj"
)

它将在 my_proj.a 构建后运行 objcopy。如果您需要更细粒度地操作哪些对象文件,我建议您将库拆分为几个较小的静态库,并对每个库进行相应的操作。

关于c++ - 在链接静态库之前让cmake修改目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47317769/

相关文章:

c++ - 更改 CLion 中的默认 CMakeLists.txt 以包含警告

opencv - 无法在CMake中配置和构建OpenCV

ubuntu - 将 optirun 和 g++ 设置为编译器以在 Ubuntu 中编译 OpenCL

c++ - 在 C++ 中使用 for 循环的系列总和

C++ : How do I execute a function after several seconds?

c++ - 二维 vector 优化

c++ - 如何用CMake测试项目中所有的header是否都是自包含的?

c++ - 使用 CMake 安装的 PDB 文件

c++ - BOOST_SPIRIT_DEBUG_NODE 无法在变体节点上编译

C++:如何使用堆栈检查字符串中是否存在相同数量的字母 'a' 和 'b'