1. 程式人生 > >vs解決方案目錄結構設定

vs解決方案目錄結構設定

轉載網址:http://www.cnblogs.com/zuibunan/p/3843459.html

涉及到的配置:
專案編譯時使用的中間目錄;
專案連結的輸出目錄;
專案編譯結束後,拷貝生成的 dll 和 lib 到指定目錄;
專案編譯結束後,拷貝需要的 dll 到輸出目錄;
設定專案的工作目錄;
設定除錯時執行的 exe 和工作目錄;




配置時使用到的一些巨集:
ConfigurationName   配置名字,通常是Debug或者Release
IntDir              編譯器使用的中間目錄,產出obj檔案
OutDir              連結器使用的輸出目錄
ProjectDir          專案目錄
ProjectName         專案名字
SolutionDir         解決方案目錄
TargetDir           目標輸出檔案所在的目錄
TargetExt           目標輸出的副檔名
TargetFileName      目標輸出檔名,包括副檔名
TargetName          目標輸出名,不包括副檔名
TargetPath          目標輸出檔案的全路徑名




下面以 Sticker 為例展示目錄結構設定的過程:
Sticker 目錄結構:
Sticker
    +-- 3rd (第三方庫)
    |   +-- dll
    |   |   +-- debug
    |   |   +-- release
    |   +-- lib
    |   |   +-- debug
    |   |   +-- release
    |   +-- include
    |
    +-- src (原始碼)
    |   +-- Sticker
    |   |   +-- Sticker 專案的程式碼
    |   +-- StickerLibrary
    |   |   +-- StickerLibrary 專案的程式碼
    |   +-- Sticker.sln
    |
    +-- xar (指令碼)
    |   +-- Sticker
    |   +-- ...
    |
    +-- doc (文件)
    |
    +-- bin (可執行檔案)
    |   +-- debug
    |   +-- release
    |
    +-- temp (中間目錄)
        +-- compile
        |   +-- debug
        |   +-- release
        +-- link
            +-- debug
            +-- release


1. 建立資料夾 Sticker\src
2. 建立一個空的解決方案 Sticker.sln ,放入 Sticker\src 中
3. 建立專案 Sticker
4. 屬性 --> 配置 設定為“所有配置”,這樣可以同時設定 debug\release 下的配置
5. 配置屬性 --> 常規 --> 中間目錄: $(SolutionDir)..\temp\compile\$(ConfigurationName)
6. 配置屬性 --> 常規 --> 輸出目錄: $(SolutionDir)..\temp\link\$(ConfigurationName)
7. 配置屬性 --> C/C++ --> 常規 --> 附加包含目錄: "$(SolutionDir)..\3rd\include"
8. 配置屬性 --> 連結器 --> 常規 --> 附加庫目錄: "$(SolutionDir)..\3rd\lib\$(ConfigurationName)"
9. 配置屬性 --> 連結器 --> 輸入 --> 附加依賴項: xxx1.lib xxx2.lib xxx3.lib
10. 配置屬性 --> 生成事件 --> 生成後事件 --> 命令列: 
    md $(SolutionDir)..\bin\$(ConfigurationName)
    copy $(TargetPath) $(SolutionDir)..\bin\$(ConfigurationName)
    copy $(SolutionDir)..\3rd\dll\$(ConfigurationName) $(SolutionDir)..\bin\$(ConfigurationName)
11. 配置屬性 --> 除錯 --> 命令: $(SolutionDir)..\bin\$(ConfigurationName)\$(TargetFileName)
12. 配置屬性 --> 除錯 --> 工作目錄: $(SolutionDir)..\bin\$(ConfigurationName)\

當一個解決方案中設定了工程A依賴於工程B;
工程B為 lib 靜態庫;工程A需要連結工程B的庫;
此時,在該解決方案中編譯,工程A和B都不會有問題;
 
但是,如果遷移工程A到其他位置,僅附帶工程B的標頭檔案和lib檔案;並且在工程A中設定了相應的庫目錄和標頭檔案目錄;
但是,編譯時,工程A會固執的在當前工程的輸出路徑中去找工程B的lib檔案,導致找不到而報錯,例如:
1>LINK : fatal error LNK1104: 無法開啟檔案“E:\DGSource\DG_Game\Project2009\trunk\DreamStudio\Projects\Debug\DreamStudioGuidD.lib”
經檢查,發現在解決方案中設定的專案依賴項不是儲存在解決方案中的,而是儲存在專案檔案中的(轉載)