我真的是 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/