在启用ARC的情况下使用CMake构建Objective-C库

geo*_*emp 2 objective-c cmake

我正在尝试使用CMake构建一个启用了Objective-C ARC的库。使用“ Unix Makefiles”生成器时,我遇到警告:

方法可能缺少[super dealloc]调用

使用XCode生成器时,我不会遇到此警告。我是否可以将标志传递给CMake以确保命令行版本也将其识别为ARC版本并且没有生成该警告?

谢谢

Yuc*_*ong 5

您需要让CMake知道您要使用ARC构建项目。否则,它将显示警告。

选项1

但是,CTSetObjCArcEnabled仅当我们安装了cmake-toolkit时才可用。如果未安装,则可以使用以下命令:

set_property (TARGET target_name APPEND_STRING PROPERTY 
              COMPILE_FLAGS "-fobjc-arc")
Run Code Online (Sandbox Code Playgroud)

选项2(从3.0开始不推荐使用)

使用CTSetObjCARCEnabled。参考在这里可用:

在每个目录,每个目标或每个源的基础上启用或禁用Objective-C自动引用计数。

CTSetObjCARCEnabled(<value>  
        <DIRECTORY | TARGETS targets... | SOURCES sources... >)
Run Code Online (Sandbox Code Playgroud)

有用的提示

另外,根据此答案的建议,使用以下命令来确保在启用ARC的情况下编译项目也很有帮助:

#if ! __has_feature(objc_arc)
#error "ARC is off"
#endif
Run Code Online (Sandbox Code Playgroud)

  • 不再维护:“是的警告:该存储库不再维护,其日期可追溯到几年前我第一次学习CMake的时间;现代(3.0版后)”(https://github.com/nickhutchinson/cmake-toolkit )第二个选项可能成为第一个 (2认同)

Ad *_*d N 5

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

target_compile_options(target_name PUBLIC "-fobjc-arc")
Run Code Online (Sandbox Code Playgroud)


注意:使用PUBLIC将根据此目标将此编译器标志传递到其他目标。替换为PRIVATE将阻止这种传播。