[轉]VisualStudio如何組織解決方案的目錄結構

***************************************************

更多精彩,歡迎進入:http://shop115376623.taobao.com

***************************************************


解決方案與項目:

VC6之后VC系列就使用解決方案Solution)來替代原來的工作空間,用于組織和管理多個相關的項目(Project
文章首先演示一個虛擬的解決方案和我們期望得到的目錄結構,然后使用VC2008的項目設置功能來一步一步達到我們的需求。

虛擬解決方案:
該虛擬解決方案名為GMA,包含
一個動態鏈接庫項目ChocolateMilk
一個應用程序項目PureMilk
需要使用一個第三方庫log4cxx(Apache log4j的C++移植版本,用于日志輸出)
log4cxx是以動態庫的方式編譯的,所以我們需要它的3樣東西,分別是頭文件,導入庫(log4cxx.lib, log4cxxd.lib)和動態鏈接庫(log4cxx.dll)。
假設我們期望的目錄結構如下圖:

1. GMA是解決方案目錄

2. PureMilk和ChocolateMilk是項目目錄

3. Lib目錄用于存放導入庫或者靜態庫(包括第三方庫和自己的項目)

4. Include用于存放第三方庫的頭文件

5. Bin目錄存放所有動態鏈接庫和執行檔,包括自己的產出和第三方庫,區分Release和Debug兩個版本。另外,程序運行過程中需要外部的數據文件和啟動時需要的配置文件等等都可放于該目錄

6. Temp用于存放臨時生成文件,其中Compile存放編譯器編譯時生成的obj文件,Link存放鏈接器的輸出文件。

上面目錄結構清晰,一面了然,當我們的程序需要制作安裝包或者要打包源碼
發布的時候,它能夠使得我們生活變得更容易^_^
制作安裝包時我們只需將“/GMA/Bin/Release/”目錄下的所有文件打包。
發布和轉移源碼的時候我們可以打包除了Temp目錄以外“/GMA/”下面的所有文件和目錄(如果不需要執行檔,也可不包括Bin)。
我們的需求是明確的,可是VC 2008并不會自動為我們做好上面所有的事情。不過我們并不需要編寫復雜的編譯腳本(makefile),只需要簡單的修改項目的缺省設置即可。

我們需要
VC為我們做的事情包括:

1.使用“/GMA/Temp/Compile/”作為項目編譯時使用的中間目錄

2.使用“/GMA/Temp/Link/”作為項目鏈接的輸出目錄

3.當項目是應用程序時,在構建結束后拷貝執行文件到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”,當項目是動態鏈接庫時,除了拷貝dll到Bin,還拷貝導入庫到“/GMA/Lib/”

4.當項目是應用程序時,調試時運行“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”下面的執行文件,并以“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”為工作目錄

首先看一下項目設置中可以使用的宏,常用的有:
ConfigurationName 配置名字,通常是Debug或者Release
IntDir 編譯器使用的中間目錄,產出obj文件
OutDir 鏈接器使用的輸出目錄
ProjectDir 項目目錄
ProjectName 項目名字
SolutionDir 解決方案目錄
TargetDir 目標輸出文件所在的目錄
TargetExt 目標輸出的擴展名
TargetFileName 目標輸出文件名,包括擴展名
TargetName 目標輸出名,不包括擴展名
TargetPath 目標輸出文件的全路徑名

首先來設置
ChocolateMilk
1.使用“/GMA/Temp/Compile/”作為項目編譯時使用的中間目錄2.使用“/GMA/Temp/Link/”作為項目鏈接的輸出目錄
注意高亮的部分,首先將配置改成All Configuration(全部配置),這樣可以讓我們同時修改Debug和Release的部分;
Output Directory(輸出目錄,鏈接器)欄位填入:
$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
Intermediate Directory(中間目錄,編譯器)欄位填入:
$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
3.構建結束后拷貝動態鏈接庫到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”,拷貝導入庫到“/GMA/Lib/”
我們通常都會在Debug版本的輸出庫后面加上字母“d”以表示這是Debug版本,在Debug配置下,修改Import Library欄位:
VC可以讓我們設置構建前后執行的腳本程序,所以為了完成3,
我們需要寫構建后執行的腳本:
在Command Line中填入,Debug配置下:
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;
copy $(TargetDir)$(TargetName)d.lib $(SolutionDir)\Lib\;
Release配置下:
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;
copy $(TargetDir)$(TargetName).lib $(SolutionDir)\Lib\;
之所以要分別設置是因為VC沒有表示導入庫的宏名字 -_-P
OK,到此為止,你就可以編譯ChocolateMilk項目試試是不是一切正常了,不過請確認拷貝的目標目錄事先建立好。

接下來我們設置應用程序項目
PureMilk
1.使用“/GMA/Temp/Compile/”作為項目編譯時使用的中間目錄2.使用“/GMA/Temp/Link/”作為項目鏈接的輸出目錄
首先將配置改成All Configuration(全部配置),這樣可以讓我們同時修改Debug和Release的部分;
Output Directory(輸出目錄,鏈接器)欄位填入:
$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
Intermediate Directory(中間目錄,編譯器)欄位填入:
$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
3.構建結束后拷貝執行文件到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”
在Command Line中填入,All配置下:
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName);
4.調試時運行“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”下面的執行文件,并以“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”為工作目錄
Command欄位填入:$(SolutionDir)\Bin\$(ConfigurationName)\$(TargetFileName)
Working Directory欄位填入:$(SolutionDir)\Bin\$(ConfigurationName)\
這樣就大功告成了,現在你就可以編譯該執行程序并進行調試。

備注:此文不是適合所有項目,不過利用Visual Studio里面的宏定義和生成事件確實可以更好的組織項目目錄結構,轉載以備查閱。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/459060.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/459060.shtml
英文地址,請注明出處:http://en.pswp.cn/news/459060.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java幾種刪除_幾種刪除Linux目錄的方法

在Linux中有很多方法可以刪除目錄,在圖形化界面可以利用文件管理器,或者通過終端刪除。本文將介紹在文本界面使用命令刪除目錄。使用rmdir刪除目錄Rmdir命令間成“remove directory”,用于刪除空目錄的命令。例如,刪除一個名為“M…

php公鑰模數,php – 如何從公共指數和RSA模數生成DER / PEM證書?

眾所周知,公鑰由公共指數和模數組成.我的問題是:如何從公共指數和RSA模數生成DER / PEM證書?非常感謝你提前.解決方法:使用公共指數和模數,你可能希望做的最好的事情是得到這樣的東西:-----BEGIN PUBLIC KEY-----MIGGAoGAfHlcdrcuOK6C02rbGR3…

C# DataTable的詳細用法

*************************************************** 更多精彩,歡迎進入:http://shop115376623.taobao.com *************************************************** DataTable 是一個臨時保存數據的網格虛擬表(表示內存中數據的一個表。)。DataTable是A…

【SpringMVC】SpringMVC系列6之@CookieValue 映射請求Cookie 值

6、CookieValue 映射請求Cookie 值 6.1、示例 CookieValue 可讓處理方法入參綁定某個 Cookie 值,示例如下:

杭電OJ-2104_hide handkerchief超簡潔代碼

#include<iostream> using namespace std; int n, m;; int zz(int a, int b) {return b0 ? a: zz(b, a%b); } int main() {while (cin >> n >> m&&n ! -1 && m ! -1)cout << (nb(n, m) 1 ? "YES" : "POOR Haha"…

php 年月日 中文,轉換中文日期的PHP程序

轉換中文日期的PHP程序本程序將中文日期輸出為2001-12-23&#xff0c;并很好解決了“十”的問題&#xff0c;如“十一”和“二十一”中“十”的處理&#xff01;稍加修改可改為函數。跟隨小編去看看吧&#xff01;希望對大家有所幫助&#xff01;$str"二零○一年十二月二十…

c# Invoke和BeginInvoke

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 轉自&#xff1a;http://blog.3snews.net/html/30/34530-27563.html在多線程編程中&am…

Oracle手邊常用70則腳本知識匯總

Oracle手邊常用70則腳本知識匯總 作者&#xff1a;白寧超 時間&#xff1a;2016年3月4日13:58:36 摘要: 日常使用oracle數據庫過程中&#xff0c;常用腳本命令莫不是用戶和密碼、表空間、多表聯合、執行語句等常規操作。另外表的導入導出也很常用&#xff0c;這些腳步命令之前都…

php常見的面試題目

一. 基本知識點1.1 HTTP協議中幾個狀態碼的含義:503 500 401 403 404 200 301 302。。。200 : 請求成功&#xff0c;請求的數據隨之返回。301 : 永久性重定向。302 : 暫時行重定向。401 : 當前請求需要用戶驗證。403 : 服務器拒絕執行請求&#xff0c;即沒有權限。404 : 請求失…

php表示私有變量的是,PHP 訪問私有和受保護的成員變量

示例反射通常用作軟件測試的一部分&#xff0c;例如在運行時創建/實例化模擬對象。這對于在任何給定時間點檢查對象的狀態也非常有用。這是在單元測試中使用Reflection來驗證受保護的類成員是否包含期望值的示例。下面是一個非常基礎的汽車課。它具有受保護的成員變量&#xff…

BZOJ2683 簡單題(CDQ分治)

傳送門 之前聽別人說CDQ分治不難學&#xff0c;今天才知道果真如此。之前一直為自己想不到CDQ的方法二很不爽&#xff0c;今天終于是想出來了一道了&#xff0c;太弱…… cdq分治主要就是把整段區間分成兩半&#xff0c;然后用左區間的值去更新右區間的答案&#xff0c;每次把…

VS2010斷點設置技巧

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 許多Visual Studio下的程序員&#xff0c;甚至一些很有經驗的開發人員&#xff0c;都不…

IOS應用開發版本控制工具之Versions使用,iosversions

Versions版本控制工具破解版&#xff08;Versions.zip&#xff09;下載請見本博文附件。下載后在MAC安裝完以后&#xff0c;圖標是蓮花狀。見下圖&#xff1a; 雙擊運行如下圖&#xff1a; 點擊Repository&#xff0c;連接SVN服務器Repository&#xff08;服務器端采用的是SVN服…

php form action跳轉,form表單頁面跳轉方式提交練習

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓//form表單提交練習/*新建一個form.html網頁用來書寫前端HTML表單*/表單提交練習姓名:年齡:電話:地址:QQ:自我評價://以上功能可自己添加或修改/*在form.html網頁的基礎上新建一個foms.php網頁關聯之前的form.html網頁并書寫php測試…

VS2010調試快捷鍵

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** vs2010 調試快捷鍵 命令名 快捷鍵 說明 調試.應用代碼更改 Alt F10 啟動生…

什么是算法,什么是數據結構

盡管已經學了幾年&#xff0c;對它們也可以說大致懂得。但是&#xff0c;作為非計算機專業的人員&#xff0c;還是不會比計算機專業人員懂得多。既然沒有受過專門的學習訓練&#xff0c;自然會有三天打魚兩天曬網的感覺&#xff0c;一天可能冒出一個念頭。于是乎&#xff0c;寫…

如何在多web服務器共享SESSION數據

2019獨角獸企業重金招聘Python工程師標準>>> 一、問題起源 稍大一些的網站&#xff0c;通常都會有好幾個服務器&#xff0c;每個服務器運行著不同功能的模塊&#xff0c;使用不同的二級域名&#xff0c;而一個整體性強的網站&#xff0c;用戶系統是統一的&#xff0…

grpc php 返回值過大,使用grpc實現php、java、go三方互調

grpc作為經典的rpc協議&#xff0c;雖然略重&#xff0c;但是是有學習的價值的通過下面的內容可以快速上手這個grpc框架安裝命令行工具php需要這個額外的protoc、grpc_php_plugin工具把這個protobuf格式的文件生成php語言里的類go需要安裝protoc-gen-go工具把protobuf格式的接口…

SOCKET通信的基本步驟

SOCKET通信的基本步驟 1&#xff09;建立一個服務器ServerSocket&#xff0c;并同時定義好ServerSocket的監聽端口&#xff1b;2&#xff09;ServerSocket 調用accept()方法&#xff0c;使之處于阻塞。3&#xff09;創建一個客戶機Socket,并設置好服務器的IP和端口。4&#xff…

Linux epoll 筆記(高并發事件處理機制)

wiki&#xff1a; Epoll優點&#xff1b; Epoll工作流程&#xff1b; Epoll實現機制: epollevent; Epoll源碼分析&#xff1b; Epoll接口: epoll_create; epoll_ctl; epoll_close; Epoll工作方式: LT(level-triggered); ET(edge-triggered); Epoll應用模式; Epoll優點&#xff…