如何在cmake中使用self ld、objcopy和ar?

How to use self ld, objcopy and ar in cmake?

我想在我的项目中使用两个版本的静态库。我从中找到了答案 Restricting symbols in a Linux static library.

但我不知道如何使用 cmake 运行 以下命令:

ld -r obj1.o obj2.o ... objn.o -o static1.o
objcopy --localize-hidden static1.o static2.o
ar -rcs mylib.a static2.o

您可以使用 execute_process 调用命令,如下所示:

execute_process(COMMAND "ld" "-r" "obj1.o" "obj2.o" ... WORKING_DIRECTORY "...") 

或像here

一样使用add_custom_command

使用

find_program(CMAKE_OBJCOPY objcopy)

find_program(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy)

其中 TOOLCHAIN_PREFIX 是自定义工具链的路径(例如,如果您为 ARM、MIPS e.t.c 构建解决方案)。参见 example

然后你可以使用这样的命令(使用execute_process):

    execute_process(COMMAND
      ${CMAKE_OBJCOPY} --localize-hidden static1.o static2.o
      RESULT_VARIABLE objcopy_result
      ERROR_QUIET
      OUTPUT_VARIABLE objcopy_out)

或使用add_custom_command