2013-03-27 10 views
6

W większości moich projektów w C++ chcę użyć innej struktury katalogów niż domyślna struktura katalogów w Visual Studio. tj:Generuj plik projektu vs2010 z własnymi katalogami źródłowymi

/project 
    /build # put visual studio soluation and project files 
    /src # only put the c++ header files and source files 
    /bin # put the target executable files 
     /debug 
     /release 
    /tmp 
     /debug 
     /release 

Everytime utworzyć solutaion w VS2010 będę config tych katalogów (np OutputDirectory), ale teraz jestem naprawdę nudny ten temat.

Czy istnieje narzędzie do automatycznego generowania plików rozwiązania i projektu vs2010 według mojego pliku konfiguracyjnego? A moim jedynym wymaganiem jest ustawienie tych katalogów.

+2

Oznaczyłeś swoje pytanie słowem "cmake". CMake faktycznie pozwala na to (z wyjątkiem może lokalizacji pośredników kompilacji (pliki obiektów), które kończyłyby się gdzieś pod '/ project/build'). Jakie jest dokładnie twoje pytanie: czy CMake może to zrobić, czy jak to zrobić? – Angew

+0

Jestem nowy w cmake, ale próbowałem użyć cmake do rozwiązania mojego problemu i nie ma dla mnie łatwego rozwiązania. Przypuszczam, że może istnieć szkieletowy plik cmake do wygenerowania pliku projektu vs2010 z odpowiednimi konfiguracjami. Ale wciąż nie znalazłem. –

Odpowiedz

2

Możesz napisać takie narzędzie samodzielnie w C# na przykład, spójrz na klasy w przestrzeni nazw Microsoft.Build.Construction, są one przeznaczone do programowania programowego.

Jednak prostszą, ale bardziej wszechstronną opcją jest używanie tego samego arkusza właściwości we wszystkich projektach i ustawianie wszystkich potrzebnych ścieżek katalogów. Ma to również ogromną zaletę, ponieważ jest wielokrotnego użytku, więc jeśli kiedykolwiek zdecydujesz się na zmianę katalogów wyjściowych, wszystkie projekty odnoszące się do arkusza właściwości zostaną automatycznie zmienione. Na przykład:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <MyMainDir>$(ProjectPath)\..\</MyMainDir> 
    <OutDir>$(MyMainDir)\bin\$(ConfigurationName)</OutDir> 
    <IntDir>$(MyMainDir)\tmp\$(ConfigurationName)</IntDir> 
    </PropertyGroup> 
</Project> 

To będzie pierwszy dowiedzieć się swoją „główną dir” czyli jeden o nazwie „projekt” w swoje pytanie, a następnie ustawić wyjście i katalogi pośrednie oparte na tym, a nazwa bieżącego ConfigurationName, domyślnie jest to Debug lub Release.

Teraz chodzi tylko o importowanie tego arkusza właściwości w projekcie: przejdź do View->Other Windows->Property Manager, kliknij projekt prawym przyciskiem myszy, wybierz Add Existing property Sheet. Lub możesz ręcznie dodać <Import Project=....> w pliku projektu.

Podczas pracy możesz równie dobrze dodać opcje kompilatora/linkera do arkusza właściwości, aby wszystkie projekty używały tych samych opcji. To zajmuje trochę czasu, ale zaoszczędzi ci mnóstwo czasu w przyszłości, ponieważ nie musisz zmieniać tych samych opcji w ustawieniach projektu w kółko.

+0

tak, dwa rozwiązania, o których tutaj wspomniałeś, są po prostu tym, co uważam. Chcę napisać narzędzie, ale jeśli mam już jakieś narzędzia, które zaoszczędzą mi mnóstwo czasu. –

5

Możesz uzyskać strukturę za pomocą następującej listy CMakeList. Dodaje się zakłada, że ​​plik znajduje się .../project/CMakeLists.txt:

cmake_minimum_required(VERSION 2.8) #every top-level project should start with this command; replace the version with the minimum you want to target 
project(MyProjectName) 

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) # put .exe and .dll files here 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) # put .so files here (if you ever build on Linux) 
set(CMAKE_MODULE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) # put .dll and .so files for MODULE targets here 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib) # put .lib files here 

# Note that for multi-configuration generators (like VS), the configuration name will be appended to the above directories automatically 

# Now that the directories are set up, we can start defining targets 

add_executable(MyExe src/myExe.cpp) 
add_library(MyLib SHARED src/myDLL.cpp) 

target_link_libraries(MyExe MyLib) 

Podczas wywoływania CMake ustawić katalog wyjściową .../project/build (na przykład w GUI CMake). Jeśli uruchomiony z linii poleceń, czy to tak:

> cd .../project/build 
> cmake .. -G "Visual Studio 10" 

Należy pamiętać, że niektóre generatory (Eclipse) nie podoba, gdy katalog wyjściowy podkatalogu katalogu źródłowego. W takim przypadku zaleca się niewielką zmianę struktury katalogów.

+0

Dzięki. Ale jestem nowy w cmake, są pewne szczegóły, których nie rozumiem.Co tam nie ma plików źródłowych, co mogę nazwać 'add_executable'? Czy powinienem podać instrukcję cmake, aby uzyskać więcej informacji? –

+0

@kevinlynx Istnieje oficjalny [tutorial] (http://www.cmake.org/cmake/help/cmake_tutorial.html), który poprowadzi Cię przez podstawy. Do twojego Q: wyszukuje pliki źródłowe w CMakeLists i dodaje je tam, kiedy dodajesz nowe źródła do twojego projektu. To powoduje, że CMake ponownie generuje system budowania ('.sln' i' .vcxproj' w twoim przypadku). – Angew

+0

+1 to całkiem dobre rozwiązanie, jeśli możesz użyć cmake – stijn

Powiązane problemy