2013-02-27 12 views
5

Chcę wygenerować plik wykonywalny w pliku .bundle na Mac OSX 10.6.8 przy użyciu CMake. Mój plik CMakeLists.txt wygląda następująco:Generowanie pliku .bundle z CMake na MAC OSX

cmake_minimum_required(VERSION 2.8) 
PROJECT(TESTProject) 
SET(MACOSX_BUNDLE_BUNDLE_NAME TEST) 
ADD_EXECUTABLE(TEST MACOSX_BUNDLE main.cpp) 
SET_TARGET_PROPERTIES(TEST PROPERTIES MACOSX_BUNDLE TRUE) 

Potem zadzwoń CUpewnij:

CMake -G"Xcode" . 

Jednak, kiedy mogę skompilować program ze Xcode 3.2.1, ja ciągle dostać TEST.app plik zamiast pliku TEST.bundle.

Co ja tu robię źle?

+0

Informacje na stronie http://www.cmake.org/Wiki/CMake:Bundles_And_Frameworks sugerują, że 'MACOSX_BUNDLE' wskazuje, że cel jest używany do tworzenia pakietu aplikacji (np. Test.app, a nie narzędzie wiersza poleceń Test), a nie pakiet '.bundle'. – bdash

+0

Tak, rzeczywiście. Bardziej zastanawiam się nad .bundle dla wtyczek na MAC OSX. – Korchkidu

Odpowiedz

6

Użyj właściwości docelowej BUNDLE_EXTENSION, aby uzyskać inne rozszerzenie niż domyślne. http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:BUNDLE_EXTENSION

Również myślę, że .app jest tylko domyślny dla wykonywalnych celów. W przypadku bibliotek lub modułów docelowych wartość .bundle powinna być wartością domyślną.

Czy próbowałeś z docelową biblioteką?

+2

Tak, w końcu udało mi się. Jest zbiorem różnych poleceń z BUNDLE_EXTENSION i add_library (zamiast add_executable). Dzięki za pomoc. – Korchkidu

+0

@Korchkidu Czy możesz podać mi dokładne polecenia i kolejność, w jakiej je napisałeś. Przykład byłby wielki. – crezefire

1

Dla każdego, kto biegnie w poprzek to i stara się zbudować .bundle biblioteki, to pracował dla mnie na CMake 3.0:

add_library(Foo MODULE ${SOURCES} ${HEADERS}) 
set_target_properties(Foo PROPERTIES BUNDLE TRUE) 

Kluczem jest wykorzystanie MODULE nie SHARED. Z jakiegoś powodu CMake w inny sposób ignoruje własność BUNDLE.