使用启用了 ARC 的 CMake 构建 Objective-C 库
Build Objective-C Library with CMake with ARC enabled
我正在尝试使用 CMake 构建一个 Objective-C 支持 ARC 的库。使用 "Unix Makefiles" 生成器时我 运行 进入警告:
method possibly missing a [super dealloc] call
我在使用 XCode 生成器时没有 运行 此警告。是否有一个标志我可以传递给 CMake 以确保命令行构建也将其识别为 ARC 构建并且不会生成该警告?
谢谢
您需要让 CMake 知道您要使用 ARC 构建项目。否则,它将显示警告。
选项 1
然而,CTSetObjCArcEnabled
只有在我们安装了 cmake-toolkit 时才可用。如果没有安装,可以使用如下:
set_property (TARGET target_name APPEND_STRING PROPERTY
COMPILE_FLAGS "-fobjc-arc")
选项 2(自 3.0 起已弃用)
使用CTSetObjCARCEnabled
。可参考 here:
Enables or disables Objective-C Automatic Reference Counting on a per-directory, per-target or per-source basis.
CTSetObjCARCEnabled(<value>
<DIRECTORY | TARGETS targets... | SOURCES sources... >)
有用的提示
此外,根据此 answer 的建议,使用以下内容有助于确保项目是在启用 ARC 的情况下编译的:
#if ! __has_feature(objc_arc)
#error "ARC is off"
#endif
另一种方法是指定每个目标的编译器标志。这可以被认为更符合现代 CMake:
target_compile_options(target_name PUBLIC "-fobjc-arc")
注意:使用PUBLIC
会将此编译器标志传递给依赖于此编译器的其他目标。替换为 PRIVATE
将阻止这种传播。
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
)
我正在尝试使用 CMake 构建一个 Objective-C 支持 ARC 的库。使用 "Unix Makefiles" 生成器时我 运行 进入警告:
method possibly missing a [super dealloc] call
我在使用 XCode 生成器时没有 运行 此警告。是否有一个标志我可以传递给 CMake 以确保命令行构建也将其识别为 ARC 构建并且不会生成该警告?
谢谢
您需要让 CMake 知道您要使用 ARC 构建项目。否则,它将显示警告。
选项 1
然而,CTSetObjCArcEnabled
只有在我们安装了 cmake-toolkit 时才可用。如果没有安装,可以使用如下:
set_property (TARGET target_name APPEND_STRING PROPERTY
COMPILE_FLAGS "-fobjc-arc")
选项 2(自 3.0 起已弃用)
使用CTSetObjCARCEnabled
。可参考 here:
Enables or disables Objective-C Automatic Reference Counting on a per-directory, per-target or per-source basis.
CTSetObjCARCEnabled(<value>
<DIRECTORY | TARGETS targets... | SOURCES sources... >)
有用的提示
此外,根据此 answer 的建议,使用以下内容有助于确保项目是在启用 ARC 的情况下编译的:
#if ! __has_feature(objc_arc)
#error "ARC is off"
#endif
另一种方法是指定每个目标的编译器标志。这可以被认为更符合现代 CMake:
target_compile_options(target_name PUBLIC "-fobjc-arc")
注意:使用PUBLIC
会将此编译器标志传递给依赖于此编译器的其他目标。替换为 PRIVATE
将阻止这种传播。
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
)