CMake link macOS Framework
macOS Frameworks such as Foundation are linked with CMAKE_LANG_LINK_LIBRARY_USING_FEATURE.
cmake_minimum_required(VERSION 3.24)
project(macosFramework LANGUAGES OBJCXX)
add_executable(main main.mm)
if(CMAKE_OBJCXX_LINK_LIBRARY_USING_FRAMEWORK_SUPPORTED)
target_link_libraries(main PRIVATE "$<LINK_LIBRARY:FRAMEWORK,Foundation>")
endif()
Example main.mm using “Foundation” macOS framework.
#import <Foundation/Foundation.h>
#include <iostream>
int main() {
@autoreleasepool {
NSURL *homeURL = [[NSFileManager defaultManager] homeDirectoryForCurrentUser];
NSString *homeDirectory = [homeURL path];
std::cout << "User home directory: " << [homeDirectory UTF8String] << std::endl;
}
return 0;
}
cmake -Bbuild
cmake --build build -v
Shows the link line used.
Obsolete syntax
The obsolete, pre-CMake 3.24 syntax is like:
target_link_libraries(main PRIVATE
"-framework Foundation"
"-framework IOKit"
)