【问题标题】:Are there environment variables for CMake add_library(<lib> OBJECT <src>)?CMake add_library(<lib> OBJECT <src>) 是否有环境变量?
【发布时间】:2012-07-15 14:53:51
【问题描述】:

CMake 是 2.8.8 在编译时引入了 OBJECT 库类型:add_library( OBJECT )。能够将所有类编译为 .o 文件,但不要将它们添加到库中,这是一个有用的构造。

但是,我不确定它最终会附加到生成的 make 文件中的命令的哪些标志。基本上,在执行 add_library(SHARED) 命令时,它会添加由 CMAKE_SHARED_LIBRARY_CXX_FLAGS 指定的任何标志。我希望能够为 JUST OBJECT 库指定构建标志,而不必求助于更多的全局标志,例如 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_RELEASE。如果这样的标志存在或计划中,有没有人有任何想法?

回顾:

# has CMAKE_SHARED_LIBRARY_CXX_FLAGS to set SHARED library build flags
add_library(<lib> SHARED <srcs>)

# Is any environment variable available to set OBJECT library build flags?
add_library(<lib> OBJECT <srcs>)

我期待一个像 CMAKE_OBJECT_LIBRARY_CXX_FLAGS 这样的环境变量来设置 OBJECT 构建标志。查看源代码(Modules/SystemInformation.in 和 Modules/CMakeCXXInformation.cmake),我没有发现任何看起来像是特定于 OBJECT 库的内容。

编辑: 具体来说,我想将 -fPIC 添加到 OBJECT 库中,而不是添加到可执行文件中,这就是我不想在 CMAKE_CXX_FLAGS_* 中指定标志的原因

【问题讨论】:

    标签: c++ makefile cmake shared-libraries


    【解决方案1】:

    使用 CMake 2.8.9 或更高版本时,使用属性POSITION_INDEPENDENT_CODE 以编译器无关的方式启用位置无关代码:

    add_library(<lib> OBJECT <srcs>)
    set_target_properties(<lib> PROPERTIES POSITION_INDEPENDENT_CODE ON)
    

    对于旧版本的 CMake,您可以设置 OBJECT_LIBRARY 目标的 COMPILE_FLAGS 属性:

    add_library(<lib> OBJECT <srcs>)
    set_property(TARGET <lib> PROPERTY COMPILE_FLAGS "-fPIC")
    

    【讨论】:

    • 这按预期工作,我能够从环境级编译标志中删除 -fPIC。谢谢!
    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2011-03-19
    • 2018-02-17
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多