代码之家  ›  专栏  ›  技术社区  ›  Lee Hambley

Cmake在Mac OSX上使用框架进行编译,并像.m/.mm那样处理.cpp文件

  •  2
  • Lee Hambley  · 技术社区  · 14 年前

    我正在寻找一个提示,让下面的工作,这是我的CMakeLists.txt文件

    # cmake_minimum_required(2.8.2)
    
    project(boilerplate)
    
    # base files
    set(src_files
      src/greet.h
      src/main.cpp
    )
    
    # if on OSX, these files are needed
    if(APPLE)
    
      SET(CMAKE_EXE_LINKER_FLAGS "-framework Foundation -w")
    
      set(src_files
        ${src_files}
        src/mac/greet.mm
        src/mac/greeting.h
        src/mac/greeting.m
      )
    endif()
    
    # if on windows, these files are needed
    if(WIN32)
      set(src_files
        ${src_files}
        src/win/greet.cpp
      )
    endif()
    
    add_executable(greeting
      ${src_files}
    )
    

    我要求在OXX .CPP文件上处理类似.mm文件(但不在Windows上),并且我可以加载核心基础等框架。我是一个完全的cmake新手,所以我甚至不知道从哪里开始,但我希望我的方向是正确的,目前的输出是:

    $ cmake CMakeLists.txt && make
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /Users/leehambley/Projects/watched.it-client
    Scanning dependencies of target greeting
    [ 33%] Building CXX object CMakeFiles/greeting.dir/src/mac/greet.o
    Linking CXX executable greeting
    Undefined symbols:
      "greet()", referenced from:
          _main in main.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    make[2]: *** [greeting] Error 1
    make[1]: *** [CMakeFiles/greeting.dir/all] Error 2
    make: *** [all] Error 2
    1
    
    1 回复  |  直到 14 年前
        1
  •  6
  •   Lee Hambley    14 年前

    一旦我了解了引擎盖下应该发生的事情,这就变得相当容易了:

    set(CMAKE_CXX_FLAGS "-x objective-c++")
    

    这说明 gcc 要设置语言属性( -x language ,在 man gcc )至 Objective-C++

    您还可以通过以下方式对单个文件执行此操作:

    set_source_files_properties(${SOURCE_FILES} PROPERTIES 
                                COMPILE_FLAGS "-x objective-c++")