如何通过CMake为Xcode项目的Other Linker Flags添加-ObjC参数
解决方法
你之前尝试的写法不生效是因为Xcode生成器对链接器参数的处理逻辑和Makefile/Ninja生成器有差异,可按以下任一方案配置:
方案1:全局生效(所有目标都添加-ObjC标记)
区分目标类型设置对应链接器变量,放在project()指令之后、目标定义代码之前即可:
# 可执行文件生效 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ObjC" CACHE INTERNAL "" FORCE) # 动态库生效 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -ObjC" CACHE INTERNAL "" FORCE) # 模块库生效 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -ObjC" CACHE INTERNAL "" FORCE)
你之前只设置了CMAKE_SHARED_LINKER_FLAGS,仅对动态库目标生效,所以其他类型的目标不会继承该参数。
方案2:指定单个目标生效
直接对目标设置链接选项,不要加LINKER:前缀,Xcode生成器会自动把参数填入对应目标的Other Linker Flags配置项:
target_link_options(my_project_target PUBLIC -ObjC)
注意该代码需要写在add_executable/add_library等目标定义代码之后,否则不生效。
方案3:直接指定Xcode属性(兼容性最高)
直接通过Xcode原生属性配置,完全避免CMake生成器的参数转换问题:
set_target_properties(my_project_target PROPERTIES XCODE_ATTRIBUTE_OTHER_LDFLAGS "-ObjC" )
如果需要追加参数而非覆盖原有配置,可以写成:
set_target_properties(my_project_target PROPERTIES XCODE_ATTRIBUTE_OTHER_LDFLAGS "${XCODE_ATTRIBUTE_OTHER_LDFLAGS} -ObjC" )
内容的提问来源于stack exchange,提问作者Alonzo Altamirano
相关产品推荐
相关产品推荐

