在链接静态库

时间:2017-11-15 21:42:39

标签: c++ 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并删除一些目标文件的调试符号?

1 个答案:

答案 0 :(得分:0)

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

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。如果您需要更精细的粒度来操作对象文件,我建议您将库拆分为几个较小的静态库,并在每个库中进行相应的操作。