CMake 修改 AR 打包参数
问题:在设置了CMAKE_AR 后,指定的打包工具不支持 cmake 自动生成的打包指令。
在使用 TI SDK 移植 CMake 项目 ,并将代码打包成静态库时,设置打包工具ar7x
SET(CMAKE_AR ${C7X_TOOLCHAIN_PATH}/bin/ar7x)
此时打包汇编静态库时默认的指令使用的参数是 cr
可以看到ar7x的help 信息,实际并不支持c,所以在打包是会报错 “epror: bad option c”
╰─➤ ./ar7x -h 127 ↵
C7x Archiver v3.1.0.LTS
Copyright (c) 2014-2019 Texas Instruments Incorporated
Syntax : ar7x [arxdt][quvsh][012] archive files ...
ar7x @command_file
Commands : (only one may be selected)
a - Add file r - Replace file
x - Extract file d - Delete file
t - Print table of contents
Options :
q - Quiet mode - Normal status messages suppressed
u - Update with newer files (use with 'r' command)
s - Print symbol table contents
v - Verbose
h - This help
Output format options:
0 - Original AR format
1 - TI long-name format (obsolescent)
2 - POSIX format (default for newly created files)
解决办法:使用ru2
参数
添加如下指令,修改在打包汇编代码时使用的参数:
set(CMAKE_ASM_CREATE_STATIC_LIBRARY "<CMAKE_AR> ru2 <TARGET> <OBJECTS>")
此外,想要修改C/C++ 打包参数也可设置想要的optons值。(如果是生成静态库可用CMAKE_<LANG>_ARCHIVE_CREATE)
SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> options <TARGET> <LINK_FLAGS> <OBJECTS>")
SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> options <TARGET> <LINK_FLAGS> <OBJECTS>")
CMAKE_AR
Name of archiving tool for static libraries.
This specifies the name of the program that creates archive or static libraries.
CMAKE_<LANG>_ARCHIVE_CREATE
Rule variable to create a new static archive.
This is a rule variable that tells CMake how to create a static archive. It is used in place of CMAKE_<LANG>CREATE_STATIC_LIBRARY on some platforms in order to support large object counts. See also CMAKE<LANG>ARCHIVE_APPEND and CMAKE<LANG>_ARCHIVE_FINISH.
CMAKE_<LANG>_CREATE_STATIC_LIBRARY
Rule variable to create a static library.
This is a rule variable that tells CMake how to create a static library for the language <LANG>.