2015-07-21 378 views
-1

我發現之前發佈了類似的問題,但我需要稍微不同的解決方案。
我有VS2012 C++項目A.vcxproj,它具有debug1配置(平臺x64),並且它生成相應的.exe。它還使用來自必須添加到環境變量的路徑的其他VS2012 C項目B.vcxproj的dll。 A.vcxproj.user文件中有如下文字在Visual Studio C++項目中設置環境變量

<LocalDebuggerEnvironment>PATH=%PATH%;C:\Program Files\libsndfile\bin;..\..\lib\simulink\;$(LocalDebuggerEnvironment) </LocalDebuggerEnvironment> 

我需要自動添加此設置了「A」的項目有以下限制

  1. 我不能用戶文件導出爲它「每個用戶」 ,所以不能上傳到我們的SCM系統,其他用戶可以下載它。
  2. 我試圖在主要功能附加代碼,像

    _putenv( 「PATH = .... \ lib中\ Simulink的」);
    但這不起作用,因爲在編譯主文件之前,它需要從指定的路徑搜索dll,而不管它。

任何人都可以提出一個簡單的,便攜式的修補程序,我可以通過SCM分發給所有用戶以及項目文件。

我也曾嘗試以下操作:
--Created批處理文件setpath.bat與以下內容

@ECHO %PATH% set PATH = %PATH%;C:\Program Files\libsndfile\bin;C:\dev\lib\simulink 

- 加入A.vcxproj設置 - >建事件 - >預建設 - >命令line

call C:\setpath.bat 

我在vS op窗口下看不到添加的路徑。 VS用戶文件也沒有得到改變,並且運行項目抱怨缺少DLL錯誤。
- 我試圖
A.vcxproj設置 - >自定義 執行批處理文件建立步驟 - >「運行」
,仍然沒有結果之前執行。

我想解決方案需要添加所需的路徑到當前的環境變量VS項目是「運行」的時間。

感謝
sedy

+0

如果沒有人可以同意這個DLL需要存儲在哪裏,那麼這當然不能工作。讓你想知道如何在用戶的機器上實現良好的效果。簡單的解決方案是簡單地將C項目添加到解決方案。現在,DLL自動結束於它所屬的位置。 –

+0

@HansPassant這2個項目由於各種原因需要分開,否則我會按照您的建議完成 – user915783

回答

0

加入A.vcxproj設置 - >生成事件 - >預生成事件

call setdllpath.bat 

該文件包含以下內容:

@ECHO %PATH% 
set COMSPEC = "%VCINSTALLDIR%\vcvarsall.bat" amd64 
setx PATH "C:\Program Files\libsndfile\bin;..\..\lib\simulink" 
@ECHO %PATH% 

所以,一旦我建立了項目,關閉Visual Studio並再次打開它,然後運行項目中的文件,它會正確拾取DLL。