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/