2013-03-27 9 views
6

In den meisten meiner C++ - Projekte möchte ich eine andere Verzeichnisstruktur von Visual Studio Standardverzeichnisstruktur verwenden. das heißt:generieren vs2010 Projektdatei mit meinen eigenen Quellverzeichnissen

/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 

Jedesmal, wenn ich eine solutaion in VS2010 erstellen werde ich diese Verzeichnisse config (z Output), aber jetzt bin ich wirklich langweilig darüber.

Also gibt es ein Tool, um vs2010 Lösung und Projektdateien automatisch nach meiner Konfigurationsdatei zu generieren? Und meine einzige Voraussetzung ist, diese Verzeichnisse zu setzen.

+2

Sie haben Ihre Frage mit 'cmake' markiert. CMake erlaubt es Ihnen tatsächlich, dies zu tun (außer vielleicht die Position von Kompilations-Vermittlern (Objektdateien), die irgendwo unter "/ project/build" landen würden). Was genau ist deine Frage: ob CMake es schaffen kann oder wie man es dort macht? – Angew

+0

Ich bin neu zu cmake, aber ich habe versucht, Cmake zu verwenden, um mein Problem zu lösen, und es gibt keine einfache Lösung für mich. Ich nehme an, dass es vielleicht eine Skelett-cmake-Datei gibt, um die vs2010-Projektdatei mit den richtigen Konfigurationen zu erzeugen. Aber ich habe immer noch nicht gefunden. –

Antwort

2

Sie könnten ein solches Tool beispielsweise in C# schreiben, sehen Sie sich die Klassen im Microsoft.Build.Construction Namespace an, sie sind für das programmatische Erstellen von Projekten gedacht.

Eine einfachere, aber vielseitige Option verwendet dasselbe Eigenschaftenblatt in allen Ihren Projekten und stellt alle Verzeichnispfade ein, die Sie benötigen. Dies hat auch den großen Vorteil, dass es wiederverwendbar ist. Sollten Sie sich jemals dazu entschließen, Ihre Ausgabeverzeichnisse zu ändern, sind alle Projekte, die auf Ihr Eigenschaftenblatt verweisen, automatisch betroffen. Zum Beispiel:

<?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> 

Dies wird zuerst die ‚Hauptverzeichnis‘, dh das mit dem Namen ‚Projekt‘ in Ihrer Frage herauszufinden, und stellen Sie dann die Ausgabe und Zwischenverzeichnisse auf der Grundlage dieser und der Name der aktuellen ConfigurationName, Dies ist standardmäßig Debug oder Release.

Nun ist es nur eine Frage des Importierens dieses Eigenschaftsblattes in Ihr Projekt: Gehen Sie zu View->Other Windows->Property Manager, klicken Sie mit der rechten Maustaste auf das/die Projekt (e), wählen Sie Add Existing property Sheet. Oder Sie können manuell eine <Import Project=....> in der Projektdatei hinzufügen.

Während Sie gerade dabei sind, können Sie dem Eigenschaftsfenster auch Compiler/Linker-Optionen hinzufügen, sodass alle Ihre Projekte dieselben Optionen verwenden. Das braucht jetzt einige Zeit, aber Sie werden in Zukunft viel Zeit sparen, da Sie die gleichen Optionen in den Projekteinstellungen nicht immer und immer wieder ändern müssen.

+0

Ja, die zwei Lösungen, die Sie hier erwähnt haben, sind genau das, was ich in Betracht ziehe. Ich möchte ein Tool schreiben, aber wenn es bereits einige Werkzeuge gibt, die mir viel Zeit sparen. –

5

Sie können die Struktur mit der folgenden CMakeList erreichen. Im Folgenden nimmt die Datei auf .../project/CMakeLists.txt befindet:

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) 

Wenn CMake Aufrufe das Ausgabeverzeichnis zu .../project/build eingestellt (beispielsweise in dem CMake GUI). Wenn von der Befehlszeile ausgeführt wird, gefällt es das:

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

Bitte beachten Sie, dass einige Generatoren (Eclipse) mögen es nicht, wenn das Ausgabeverzeichnis ein Unterverzeichnis des Quellverzeichnis. Für diesen Fall empfiehlt sich eine leichte Verzeichnisstrukturierung.

+0

Danke. Aber ich bin neu zu cmake, es gibt einige Details, die ich nicht verstehe.Was gibt es noch keine Quelldateien? Was kann ich 'add_executable' nennen? Sollte ich ein CMake Handbuch für mehr Details verweisen? –

+0

@kevinlynx Es gibt ein offizielles Tutorial (http://www.cmake.org/cmake/help/cmake_tutorial.html), das Sie durch die Grundlagen führt. Zu Ihrem Q: Sie listen Quelldateien in CMakeLists auf und fügen sie dort hinzu, wenn Sie Ihrem Projekt neue Quellen hinzufügen. Dies bewirkt, dass CMake das Buildsystem ('.sln' und' .vcxproj' in Ihrem Fall) neu generiert. – Angew

+0

+1 das ist eine ziemlich gute Lösung, wenn Sie cmake verwenden können – stijn

Verwandte Themen