我正在尝试使用CMake构建一个支持Objective-C ARC的库。当使用“Unix Makefiles”生成器时,我遇到了一个警告:方法可能缺少[super dealloc]调用我在使用XCode生成器时没有遇到这个警告。是否有一个标志可以传递给CMake,以确保命令行构建也识别出这是一个ARC构建,而不会生成那个警告?谢啦,谢啦
y53ybaqx1#
你需要让CMake知道你想用ARC构建项目。否则,它会显示警告。
备选案文1
但是,CTSetObjCArcEnabled只有在安装了cmake-toolkit的情况下才可用。如果没有安装,您可以使用以下命令:
CTSetObjCArcEnabled
set_property (TARGET target_name APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc")
选项2(自3.0起已弃用)
使用CTSetObjCARCEnabled。参考可用here:在每个目录、每个目标或每个源的基础上启用或禁用Objective-C自动引用计数。
CTSetObjCARCEnabled
CTSetObjCARCEnabled(<value> <DIRECTORY | TARGETS targets... | SOURCES sources... >)
实用提示
此外,根据此answer的建议,使用以下命令有助于确保在编译项目时启用ARC:
#if ! __has_feature(objc_arc) #error "ARC is off" #endif
uujelgoq2#
另一种方法是指定每个目标的编译器标志,这可以被认为是更符合现代CMake的:
target_compile_options(target_name PUBLIC "-fobjc-arc")
注意:使用PUBLIC会将此编译器标志传递到依赖于此编译器标志的其他目标。替换为PRIVATE将阻止此传播。
PUBLIC
PRIVATE
hujrc8aj3#
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC适用于我。请参见https://github.com/forexample/testapp/blob/master/CMakeLists.txt
set_target_properties( ${APP_NAME} PROPERTIES MACOSX_BUNDLE YES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES )
cig3rfwq4#
如果您希望所有Objective-C(++)文件都使用ARC构建,还有另一个选项:
set(CMAKE_OBJC_FLAGS "-fobjc-arc") set(CMAKE_OBJCXX_FLAGS "-fobjc-arc")
4条答案
按热度按时间y53ybaqx1#
你需要让CMake知道你想用ARC构建项目。否则,它会显示警告。
备选案文1
但是,
CTSetObjCArcEnabled
只有在安装了cmake-toolkit的情况下才可用。如果没有安装,您可以使用以下命令:选项2(自3.0起已弃用)
使用
CTSetObjCARCEnabled
。参考可用here:在每个目录、每个目标或每个源的基础上启用或禁用Objective-C自动引用计数。
实用提示
此外,根据此answer的建议,使用以下命令有助于确保在编译项目时启用ARC:
uujelgoq2#
另一种方法是指定每个目标的编译器标志,这可以被认为是更符合现代CMake的:
注意:使用
PUBLIC
会将此编译器标志传递到依赖于此编译器标志的其他目标。替换为PRIVATE
将阻止此传播。hujrc8aj3#
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC适用于我。请参见https://github.com/forexample/testapp/blob/master/CMakeLists.txt
cig3rfwq4#
如果您希望所有Objective-C(++)文件都使用ARC构建,还有另一个选项: