使用启用ARC的CMake构建Objective-C库

2j4z5cfb  于 2022-12-18  发布在  其他
关注(0)|答案(4)|浏览(162)

我正在尝试使用CMake构建一个支持Objective-C ARC的库。当使用“Unix Makefiles”生成器时,我遇到了一个警告:
方法可能缺少[super dealloc]调用
我在使用XCode生成器时没有遇到这个警告。是否有一个标志可以传递给CMake,以确保命令行构建也识别出这是一个ARC构建,而不会生成那个警告?
谢啦,谢啦

y53ybaqx

y53ybaqx1#

你需要让CMake知道你想用ARC构建项目。否则,它会显示警告。

备选案文1

但是,CTSetObjCArcEnabled只有在安装了cmake-toolkit的情况下才可用。如果没有安装,您可以使用以下命令:

set_property (TARGET target_name APPEND_STRING PROPERTY 
              COMPILE_FLAGS "-fobjc-arc")

选项2(自3.0起已弃用)

使用CTSetObjCARCEnabled。参考可用here
在每个目录、每个目标或每个源的基础上启用或禁用Objective-C自动引用计数。

CTSetObjCARCEnabled(<value>  
        <DIRECTORY | TARGETS targets... | SOURCES sources... >)

实用提示

此外,根据此answer的建议,使用以下命令有助于确保在编译项目时启用ARC:

#if ! __has_feature(objc_arc)
#error "ARC is off"
#endif
uujelgoq

uujelgoq2#

另一种方法是指定每个目标的编译器标志,这可以被认为是更符合现代CMake的:

target_compile_options(target_name PUBLIC "-fobjc-arc")

注意:使用PUBLIC会将此编译器标志传递到依赖于此编译器标志的其他目标。替换为PRIVATE将阻止此传播。

hujrc8aj

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  
)
cig3rfwq

cig3rfwq4#

如果您希望所有Objective-C(++)文件都使用ARC构建,还有另一个选项:

set(CMAKE_OBJC_FLAGS "-fobjc-arc")
set(CMAKE_OBJCXX_FLAGS "-fobjc-arc")

相关问题