2010-09-22 5 views
1

Je cherche une astuce pour obtenir ce qui suit pour travailler, voici mon CMakeLists.txtCmake compilation avec des cadres sur Mac OSX et traiter cpp fichiers comme .m/.mm

 
# 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} 
) 

Je requiers que sur OSX les fichiers .cpp sont traités comme des fichiers .mm (mais sur Windows, pas) et que je peux charger la base de base, les frameworks etc ... Je suis un newbie complet de cmake, donc je ne peux même pas commencer à savoir par où commencer, mais j'espère que je suis en quelque sorte dans la bonne direction, la sortie actuelle est:

 
$ 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 

Répondre

5

Cela est avéré être assez facile une fois que je compris wha t était censé se produire sous le capot:

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

qui indique gcc que vous souhaitez définir la propriété de la langue (-x language, en man gcc) à Objective-C++.

Vous pouvez aussi le faire pour les fichiers individuels avec:

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

J'ai eu un succès mitigé à la fois, en soulignant sans doute quelques-unes des choses que je ne comprends pas bien à propos de CMake.