2011-11-29 9 views
8

Konfiguruję cmake dla mojego projektu i mam dla niego projekt testowy. Kiedy generuję projekt Visual Studio 2010, chcę zrobić to jako projekt, który miałem wcześniej.Określ, w jaki sposób cmake tworzy projekt wizualny studio

  • Tworzy projekt ALL_BUILD i ZERO_CHECK, którego nie chcę.
  • powoduje umieszczenie plików .h w folderze External Dependencies. Chcę folder Include Files, w którym znajdują się wszystkie pliki .h.
  • Chcę również pogrupować pliki w różnych filtrach. Tak jak w mojej głównej bibliotece, chcę zgrupować wszystkie pliki związane z Mathsem w folderze i wszystkie pliki związane z zarządzaniem Eventami w innym.
  • W systemie plików umieszcza pliki projektu w katalogu/Lib/src. Prawdopodobnie powoduje, że mam to zorganizowane w folderze kodu, ale nie chcę tego dla plików projektu.
  • Chcę ustawić inną konfigurację, więc mam DebugOpenGL, DebugDirectX, ReleaseOpenGL, ReleaseDirectX, a następnie ustawienie flagi USE_OPENGL lub USE_DIRECTX dla dwóch typów konfiguracji.

Jak mogę wykluczyć niektóre pliki podczas kompilacji w systemie Windows i innych podczas budowania na Linuksie? Tak jak mam WindowWin.cpp i WindowLinux.cpp.


Próbowałem co sugested ale cant get to działa:

#LibProject/src 

FILE(GLOB test0_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test.h) 
source_group(include0 FILES ${test0_headers}) 
FILE(GLOB test0_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 
source_group(source0 FILES ${test0_source}) 

FILE(GLOB test1_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test1.h) 
source_group(include1 FILES ${test1_headers}) 
FILE(GLOB test1_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test1.cpp) 
source_group(source1 FILES ${test1_source}) 

include_directories(${test0_headers} ${test1_headers}) 

add_library(LibProject ${test0_headers} ${test1_headers} ${test0_source} ${test 
1_source}) 

ja niby mam to działa teraz .. tylko, że chcę podfoldery dla nagłówków i pliki źródłowe wewnątrz grupy źródłowej.

set(test_source0 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 
source_group(TEST FILES ${test_source0}) 

set(test_source1 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp) 
source_group(TEST2 FILES ${test_source1}) 

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc) 
add_library(LibProject ${test_source0} ${test_source1}) 

Herezje moje rozwiązanie :)

set(test_header 
${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h) 
set(test_source 
${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 

source_group(TEST\\Headers FILES ${test_header}) 
source_group(TEST\\Source FILES ${test_source}) 

set(test2_header 
${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h) 
set(test2_source 
${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp) 
source_group(TEST2\\Headers FILES ${test2_header}) 
source_group(TEST2\\Source FILES ${test2_source}) 

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc) 

add_library(LibProject 
${test_header} 
${test_source} 
${test2_header} 
${test2_source}) 
+0

Spójrz na http://stackoverflow.com/questions/27175754/what-are-all-build-and-zero-check-and-do-i-need-them, aby zobaczyć, czym są ZERO_CHECK i ALL_BUILD. – sashoalm

Odpowiedz

7

Do grupy plików do folderu w Visual Studio można użyć:

# Include files 
FILE(GLOB all_headers "include/*.h*") 
source_group("include" FILES ${all_headers}) 

# Source files 
FILE(GLOB all_srcs "src/*.cpp") 
source_group("source" FILES ${all_srcs}) 

To położy wszystkich .h plików znajdujących się w folderze obejmują pojawiać się w folderze o nazwie zawrzeć w programie Visual Studio . To samo dotyczy plików cpp. Możesz użyć tej techniki do stworzenia swojej własnej struktury w CMake, jeśli tego chcesz.

Dla potrzeb ALL_BUILD i ZERO_CHECK przeczytaj this answer. Aby wyłączyć generowanie ZERO_CHECK użyj set(CMAKE_SUPPRESS_REGENERATION true).

Aby wybrać między OpenGL i DirectX oraz instalacji odpowiednich folderów, można użyć tej samej techniki używane powyżej, ale umieścić je wewnątrz

if(${USE_OPENGL}) 
    FILE(GLOB ....) 
endif() 

myślę, że pomysł.

+2

Korzystanie z GLOB prawdopodobnie nie jest najlepszym pomysłem, ponieważ nie powoduje błędu, jeśli brakuje plików, które są kluczowe dla projektu. Jeśli ręcznie wylistujesz wszystkie pliki (dużo pisania na klawiaturze znam), CMake złoży skargę, jeśli nie znajdzie znalezionego pliku. – LiMuBei

+0

aby pozbyć się ZERO_CHECK, możesz przekazać opcję -DCMAKE_SUPPRESS_REGENERATION = 0 do polecenia cmake. – davidnr

4

ja odpowiem, które znam:

ALL_BUILD i ZERO_CHECK są wykorzystywane do prowadzenia projektów w synchronizacji ze zmianami do pliki CMakeFile. Nie sądzę, żeby można się było ich pozbyć.

Aby pobrać pliki .h tam, gdzie ich potrzebujesz, musisz uwzględnić je jako część źródła. Używam czegoś takiego:

file(GLOB LocalProjectIncludes "${yourheaderdirectory}/*.h") 

Następnie dołączam $ {LocalProjectIncludes} do plików źródłowych projektu. CMake zorientuje się, że są one nagłówkami; nie będzie próbował ich budować.

Powiązane problemy