如何配置CMakeLists.txt为生成的mocs_compilation_Debug.cpp添加/bigobj编译选项
解决方案
方法1:使用CMake内置AUTOMOC编译选项属性(推荐,CMake ≥ 3.20)
CMake 3.20版本新增了AUTOMOC_COMPILE_OPTIONS目标属性,专门用于给AUTOMOC机制生成的源文件设置专属编译选项,不需要手动指定生成文件路径,可自动适配所有配置类型。
# 替换UnitTests为你实际的目标名 set_target_properties(UnitTests PROPERTIES AUTOMOC_COMPILE_OPTIONS "$<$<CXX_COMPILER_ID:MSVC>:/bigobj>" )
上述代码通过生成器表达式限制仅在MSVC编译器下生效,避免其他编译器识别报错。
方法2:给目标全局添加/bigobj选项(兼容所有CMake版本)
/bigobj仅调整MSVC编译器的.obj文件最大大小限制,对无大体积编译单元的代码无任何副作用。如果可以接受该选项应用到目标的所有源文件,直接给目标加编译选项即可,兼容性最高。
# 替换UnitTests为你实际的目标名 target_compile_options(UnitTests PRIVATE "$<$<CXX_COMPILER_ID:MSVC>:/bigobj>")
方法3:手动标记生成文件属性
你原本的方案失效主要有两个原因:一是没有标记生成文件的GENERATED属性,CMake默认不会为解析阶段不存在的文件保留属性配置;二是写死了Debug配置路径,无法适配其他构建配置。调整后写法如下:
set(BIG_OBJ_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/UnitTests_autogen/mocs_compilation_$<CONFIG>.cpp" ) set_source_files_properties(${BIG_OBJ_SOURCES} PROPERTIES GENERATED TRUE COMPILE_OPTIONS "$<$<CXX_COMPILER_ID:MSVC>:/bigobj>" )
注意该方案依赖CMake AUTOMOC的固定生成路径规则,如果后续CMake版本调整了AUTOMOC生成文件的路径规则,需要同步修改路径配置。
内容的提问来源于stack exchange,提问作者k_k
相关产品推荐
相关产品推荐

