Cmake компилирует с Frameworks на Mac OSX и обрабатывает файлы .cpp как .m / .mm - PullRequest
2 голосов
/ 22 сентября 2010

Я ищу совет, чтобы заставить работать следующее, вот мой 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}
)

Мне требуется, чтобы в OSX файлы .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 Ответ

6 голосов
/ 17 января 2011

Это оказалось довольно легко, когда я понял, что должно было происходить под капотом:

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++")

Я имел смешанный успех с обоими, вероятно, выделив некоторые вещи, которые я не совсем понимаю о CMake.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...