2013-03-27 76 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 

每次我在VS2010創建solutaion我會配置這些目錄(如輸出目錄),但現在我真的很無聊這件事。

那麼有沒有一種工具可以根據我的配置文件自動生成vs2010解決方案和項目文件?我唯一的要求是設置這些目錄。

+2

你已用'cmake'標記你的問題。 CMake確實允許你這樣做(除了編譯中介體(目標文件)的位置,最終會在'/ project/build'下面的某處)。你的問題到底是什麼:CMake是否可以做到這一點,或者如何做到這一點? – Angew 2013-03-27 08:21:44

+0

我是cmake的新手,但我試圖用cmake來解決我的問題,對我來說這不是一個簡單的解決方案。我想可能有一個骨架cmake文件來生成具有適當配置的vs2010項目文件。但我仍然沒有找到。 – 2013-03-27 09:01:34

回答

2

你可以自己用C#編寫這樣一個工具,例如看看Microsoft.Build.Construction命名空間中的類,它們是以編程方式創建項目的。

但是,更簡單但更通用的選項是在所有項目中使用相同的屬性表,並設置所需的所有目錄路徑。這也具有可重用的巨大優勢,所以如果您決定更改輸出目錄,則所有引用屬性表的項目都會自動受到影響。 例如:

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

這將首先弄清楚你的「主目錄」,即在你的問題中一個名爲「項目」,然後設置輸出和中間目錄基於這一點,當前ConfigurationName的名字,默認爲DebugRelease

現在只需在項目中導入此屬性表即可:轉至View->Other Windows->Property Manager,右鍵單擊該項目,選擇Add Existing property Sheet。或者您可以在項目文件中手動添加<Import Project=....>

當你在它的時候,你也可以在屬性表中添加編譯器/鏈接器選項,這樣所有的項目都使用相同的選項。這需要一段時間,但將來會節省大量時間,因爲您不必一次又一次地在項目設置中更改相同的選項。

+0

是的,你在這裏提到的兩種解決方案正是我所考慮的。我想寫一個工具,但是如果已經有一些工具可以爲我節省大量時間。 – 2013-03-27 09:03:35

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" 

請注意,有些發電機(Eclipse中)不喜歡它,當輸出目錄的源目錄的子目錄。對於這種情況,建議輕微的目錄重構。

+0

謝謝。但我對cmake很陌生,有些細節我不明白。什麼是沒有源文件,但我可以調用'add_executable'?我應該參考一些cmake手冊瞭解更多細節? – 2013-03-27 09:34:24

+0

@kevinlynx有一個官方的[教程](http://www.cmake.org/cmake/help/cmake_tutorial.html)來指導你完成基礎知識。對你的問題:你在CMakeLists中列出源文件,並在你添加新源時添加它們到你的項目中。這導致CMake重新生成構建系統(在你的情況下爲'.sln'和'.vcxproj')。 – Angew 2013-03-27 09:44:38

+0

+1這是一個很好的解決方案,如果你可以使用cmake – stijn 2013-03-27 10:19:48

相關問題