CMake项目修改 CMAKE_AR 打包参数

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>.

### 回答1: CMAKE_CXX_ARCHIVE_FINISH 是一个 CMake 变量,它可以用来在创建静态库时指定一个命令,该命令会在静态库创建完成之后被执行。这个变量可以用来执行一些额外的操作,比如将静态库的输出转换成一个更适合的格式,或者为静态库添加一些元信息等。 例如,你可以在 CMakeLists.txt 中这样使用这个变量: ``` set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_AR> rcs <TARGET> <LINK_FLAGS> <OBJECTS>") ``` 上面的命令会将创建的静态库转换成一个可重定向的静态库 (rs)。 ### 回答2: CMake是一款软件构建工具,用于自动生成项目构建文件。在CMakeLists.txt文件中,CMAKE_CXX_ARCHIVE_FINISH是一个CMake变量,它指示CMake在创建静态库(archive)时应该执行的步骤和命令。 静态库是一种包含可重用代码的归档文件,它可以在编译时与应用程序一起链接以创建可执行文件。CMAKE_CXX_ARCHIVE_FINISH变量用于指定静态库创建完成后的最终操作。 默认情况下,CMAKE_CXX_ARCHIVE_FINISH被设置为一个空的命令。这意味着在创建静态库后,CMake不会执行其他的操作。但是,我们可以通过将CMAKE_CXX_ARCHIVE_FINISH设置为一个自定义的命令来扩展其功能。 例如,我们可以将CMAKE_CXX_ARCHIVE_FINISH设置为一个Shell命令,用于将静态库复制到特定的目录,或在静态库构建完成后生成一些附加的文档或报告。 在某些情况下,CMAKE_CXX_ARCHIVE_FINISH还可以用于执行一些后处理操作来优化静态库。例如,可以使用它来删除没有被引用的符号,从而减小最终的静态库文件大小。 总之,CMAKE_CXX_ARCHIVE_FINISH变量允许开发人员在创建静态库后执行自定义的操作,以实现更高级的构建过程和功能。 ### 回答3: 在CMakeList中,CMAKE_CXX_ARCHIVE_FINISH是一个用于控制生成器在创建C++静态库时的归档操作的选项。默认情况下,CMake使用ar命令来创建静态库,而CMAKE_CXX_ARCHIVE_FINISH则用于指定生成静态库之后是否执行一个额外的自定义命令。 在CMakeList中,当设置了CMAKE_CXX_ARCHIVE_FINISH为true时,CMake将会在生成静态库后执行一个指定的命令来完成额外的归档操作。这个命令可以是用户自定义的脚本或外部命令。 通过在CMAKE_CXX_ARCHIVE_FINISH中指定自定义命令,可以实现一些特定的操作。例如,可以通过指定一个脚本来在生成静态库之后进行特定的文件操作,比如复制、移动或改名文件。另外,也可以在生成静态库后执行其他构建系统的命令,比如调用make install来安装静态库。 总的来说,CMAKE_CXX_ARCHIVE_FINISH的作用是允许我们在生成C++静态库后执行一些额外的操作,从而实现更灵活的构建过程。但需要注意的是,这个选项只在使用特定的生成器时才会生效,所以在不同的构建系统和平台下可能会有不同的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值