在cmake混合編譯C/C++和object-C時,設置編譯選項可以通過
使用這兩種方式在有的情況下效果是一樣的(注意:有的情況下是一樣的,不是所有情況下),他們的區別如下:
add_compile_options或者
通過set命令修改CMAKE_CXX_FLAGS
或CMAKE_C_FLAGS
。 使用這兩種方式在有的情況下效果是一樣的(注意:有的情況下是一樣的,不是所有情況下),他們的區別如下:
add_compile_options
命令添加的編譯選項是針對所有編譯器的(包括c和c++編譯器)。
set命令設置CMAKE_C_FLAGS
或CMAKE_CXX_FLAGS
變量則只針對c和c++編譯器的。
因此,在編譯C/C++與OC的混合程序中,設置 "-x objective-c++" 時,只能用add_compile_options進行添加編譯選項,否則,C/C++在編譯OC代碼時就會報出莫名的錯誤。
所以,C/C++與OC混合編譯時,CMakeLists.txt中應該如下寫:
add_compile_options(-x objective-c++)
set(CMAKE_EXE_LINKER_FLAGS "-framework Cocoa -framework AppKit -framework CoreData -framework Foundation")
對應的g++命令行參數如下:
g++ -x objective-c++ -framework Cocoa -framework AppKit -framework CoreData -framework Foundation
以上,進行編譯,就可以成功生產可執行文件。