是否存在CMake add_library(<lib> OBJECT <src>)的环境变量?</src> </lib>

时间:2012-07-16 17:49:22

标签: 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中指定标志_ *

1 个答案:

答案 0 :(得分:4)

使用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")