如何在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)
我想在我的项目中使用两个版本的静态库。我从中找到了答案 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)