2013-03-27 4 views
6

私のC++プロジェクトのほとんどで、私はVisual Studioのデフォルトのディレクトリ構造とは異なるディレクトリ構造を使いたいと思っています。すなわち:自分のソースディレクトリでvs2010プロジェクトファイルを生成

/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 

毎回私はこれらのディレクトリをconfigコンますVS2010でsolutaion(例えばOUTPUTDIRECTORY)を作成したが、今私はこのことについては本当に退屈です。

私の設定ファイルに従ってvs2010ソリューションとプロジェクトファイルを自動的に生成するツールはありますか?私の唯一の要件は、これらのディレクトリを設定することです。

+2

質問に「cmake」とタグ付けしました。 CMakeは実際に '/ project/build'の下に終わるコンパイル仲介(オブジェクトファイル)の場所を除いてこれを行うことを許可します。あなたの質問は正確に何か:CMakeはそれを行うことができるか、それをどうやって行うのですか? – Angew

+0

私はcmakeを初めて使っていますが、私は問題を解決するためにcmakeを使ってみましたが、簡単な解決策はありません。私は、適切な構成でvs2010プロジェクトファイルを生成するスケルトンcmakeファイルがあると思います。しかし、私はまだ見つからなかった。 –

答えて

2

例えば、Microsoft.Build.Construction名前空間のクラスを見ると、C#でこのようなツールを書くことができます。これは、プロジェクトをプログラムで作成するためのものです。

しかし、よりシンプルで多彩なオプションは、すべてのプロジェクトで同じプロパティシートを使用し、必要なすべてのディレクトリパスを設定しています。これは再利用可能という大きなメリットもありますので、出力ディレクトリを変更する場合は、プロパティシートを参照するすべてのプロジェクトが自動的に影響を受けます。たとえば :

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

これは最初、あなたの質問に「プロジェクト」という名前の1、すなわち、あなたの「メインディレクトリ」を把握してから出力し、中間ディレクトリそれに基づいており、現在ConfigurationNameの名前を設定しますデフォルトではDebugまたはReleaseです。

このプロパティシートをプロジェクトにインポートするだけです。View->Other Windows->Property Managerに移動し、プロジェクトを右クリックしてAdd Existing property Sheetを選択します。または、手動で<Import Project=....>をプロジェクトファイルに追加することもできます。

コンパイル/リンカーオプションをプロパティシートに追加して、すべてのプロジェクトで同じオプションが使用されるようにすることもできます。これには時間がかかりますが、プロジェクト設定の同じオプションを何度も何度も変更する必要がないため、将来の時間を節約できます。

+0

はい、あなたがここで言及した2つの解決策は、私が考えるものです。私はツールを書こうと思っていますが、すでにいくつかのツールがあれば、それは私に多くの時間を節約します。 –

5

次のCMakeListで構造を実現できます。以下は、ファイルが.../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) 

CMakeのを呼び出す場合、(例えば、CMakeのGUIの).../project/buildに出力ディレクトリを設定します。コマンドラインから実行している場合は、このようにそれを実行します。

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

は、いくつかの発電機(エクリプス)が出力ディレクトリにする場合、ソースディレクトリのサブディレクトリを、それを好きではないことに注意してくださいそのような場合には、わずかなディレクトリ再構成が推奨されます。

+0

ありがとうございます。しかし、私はcmakeに新しいです、私は理解していないいくつかの詳細があります。何がソースファイルがありませんが、私は 'add_executable'を呼び出すことができますか?私はいくつかの詳細については、cmakeのマニュアルを参照する必要がありますか? –

+0

@kevinlynx基本的なことを説明する公式の[チュートリアル](http://www.cmake.org/cmake/help/cmake_tutorial.html)があります。 Q:プロジェクトに新しいソースを追加するときに、ソースファイルをCMakeListにリストしてそこに追加します。これによりCMakeはビルドシステムを再生成します(あなたの場合は '.sln'と' .vcxproj')。 – Angew

+0

+1これはかなり良い解決策です。もしあなたがcmake – stijn

関連する問題