c++ - CMake add_library(<lib> OBJECT <src>) 有环境变量吗?

标签 c++ makefile cmake shared-libraries

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

但是,我不确定它最终附加到生成的 make 文件中的命令的标志是什么。基本上,在执行 add_library( SHARED ) 命令时,它会添加 CMAKE_SHARED_LIBRARY_CXX_FLAGS 指定的任何标志。我希望能够只为 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_* 中指定标志

最佳答案

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

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

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

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

关于c++ - CMake add_library(<lib> OBJECT <src>) 有环境变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11509730/

相关文章:

c++ - 使用 std::vector< std::shared_ptr<const T>> 是反模式吗?

C++ 质量-#include

qt - 带有在运行时加载的自定义 QML 插件的基于 CMake 的项目仅在 MinGW 下失败

linux - Mac OS X 10.9,安装 cmake 时无法在此系统上找到合适的 C 编译器

c++ - Visual Studio 卡在 BSC 创建上

C++ 是否可以将 fstream 对象设置为在每次调用 << 时自动写入换行符?

makefile - 如何为 C 源文件生成 makefile

c++ - cuda 共享库链接 : undefined reference to cudaRegisterLinkedBinary

makefile - 如果需要,如何创建目录?

cmake - 如何手动将 CMake 路径变量设置为 NOTFOUND?