在 Visual Studio 2019 中,我有兩個 C 專案包含在同一個解決方案中: ProjectA
和ProjectB
.
如何定義一個C/C Preprocessor Definition
in ProjectB
(姑且稱之為:)THE_OTHER_FILE_NAME
,它等于$(TargetFileName)
VS宏中回傳的字串ProjectA
?
注意: C/C 源檔案中的硬編碼路徑超出了這個問題的范圍。
uj5u.com熱心網友回復:
您可以包含您需要的檔案女巫,例如我的第二個專案名稱是同一檔案夾 repo 中的 p2 路徑
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <Windows.h>
#include "../p2/Header.h"
int main(){
print();
system("PAUSE");
}
頭檔案代碼
#pragma once
#include <stdio.h>
void print() {
printf("Hello\n");
}
你可以厚著臉皮問這個
最后輸入如下代碼獲取TargetFileName,希望對您有所幫助。
#include <iostream>
#include <string>
#if !defined TARGET_NAME
#define TARGET_NAME ""
#endif
int main() {
std::string str(TARGET_NAME);
std::cout << str;
}
uj5u.com熱心網友回復:
要訪問另一個專案的 VS 宏$(TargetFileName)
,請創建以下 XML 檔案:
<Project>
<PropertyGroup>
<TargetFileName_Global>__UNDEFINED__</TargetFileName_Global>
<TargetFileName_Global Condition="Exists('$(SolutionDir)TargetFileName.vsmacro')">"$([System.IO.File]::ReadAllText('$(SolutionDir)TargetFileName.vsmacro').trimend())"</TargetFileName_Global>
</PropertyGroup>
</Project>
...并將其命名Directory.Build.props
并將其放入您的Solution Directory
(您的 *.sln 檔案所在的位置)。
接下來,Solution Explorer
右鍵單擊 Project A的Properties
--> Configuration Properties
--> Build Events
--> Pre-Build Event
-->Command Line
并將其設定為:
echo $(TargetFileName) > $(SolutionDir)TargetFileName.vsmacro
接下來,Solution Explorer
右鍵單擊 Project B的Properties
--> Configuration Properties
--> C/C
--> Preprocessor
-->Preprocessor Definitions
并在其中添加以下代碼:
THE_OTHER_FILE_NAME=$(TargetFileName_Global);
重新啟動 Visual Studio。
現在,您可以隨意使用Project B中的THE_OTHER_FILE_NAME
前處理器宏和源檔案。這個宏將被定義為 Project A的目標檔案名的字串。*.h
*.c
*.cpp
請注意,專案 B 中的預THE_OTHER_FILE_NAME
處理器宏僅在您構建專案A后才會被定義。在此之前,此宏將定義為. 在構建專案A之后,您可能必須通過從背景關系選單執行-->來重繪 源檔案中的宏的和。忘記以這種方式重新掃描解決方案,只會影響顯示 - 它不會影響任何專案的構建。__UNDEFINED__
Intellisense
syntax highlighting
Rescan
Rescan Solution
Intellisense
可以使用 Visual Studio 2019 中的任何其他宏以及多個專案中的多個宏來執行此操作。這不適用于早于 VS2019 的 Visual Studio 版本,因為這些版本會忽略該Directory.Build.props
檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/533237.html
下一篇:多個電話號碼的XSD驗證