我正在尝试在编译时为我的项目组添加其他路径。由于使用,因此我已经查看了相关文档,并根据我所找到的,应该可以作为属性传递。例如:
msbuild /p:AdditionalLibPaths=C:\FooBar\Libs /t:build foo.groupproj
但似乎没有使用我添加的路径。我之前注意到,当传递给msbuild时,VC++和C++ Builder之间的某些属性名称不同,所以我想知道C++ Builder是否会使用其他属性名称来添加附加的lib和include文件夹?
我不想替换项目中定义的现有路径,而是要追加额外的路径。这样做的原因是,在我们的构建服务器上构建项目时,一些库位于标准位置,可能与开发机器上安装的位置不同。
实际上,msbuild调用一个msbuild脚本文件,该文件再调用其他脚本,包括使用标签的.groupproj脚本。我知道在使用标签时会创建一个新的msbuild实例,所以我知道必须在运行脚本中的该任务时添加属性。
<MSBuild Targets="Build" Projects="..\Foo.groupproj" Properties="Config=Debug (property to add additional paths here!)" />
更新:
C++ Builder 似乎正在使用 IncludePath 和 ILINK_LibraryPath,但设置这些会覆盖项目文件中已定义的路径。由于该文件是由 IDE 创建和维护的,因此任何更改使其附加而不是覆盖都将被 IDE 覆盖。这有点奇怪,因为它看起来确实应该附加这些值。
<IncludePath>..\FooBar\;$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;Common Components;..\Config\Config32;$(IncludePath)</IncludePath>
更新2:
在 CodeGear.Cpp.Targets 中,我添加了自己的 属性,名为 AdditionalIncludePaths,并对包含路径进行了修改。
大约在第251行附近
<PropertyGroup>
<BCC_NoLink>true</BCC_NoLink>
<ILINK_OSVersion Condition="'$(ILINK_OSVersion)'=='' And '$(NoVCL)'!='true'">5.0</ILINK_OSVersion>
<DCC_GenerateCppFiles>true</DCC_GenerateCppFiles>
<ShowStdOut Condition="'$(ShowStdOut)'==''">$(ShowGeneralMessages)</ShowStdOut>
<!-- _TCHAR mapping for Uni^H^H^H character selection -->
<StartupObj Condition="'$(_TCHARMapping)'=='wchar_t'">$(StartupObj)w</StartupObj>
<ILINK_StartupObjs Condition="'$(ILINK_StartupObjs)'==''">$(StartupObj)</ILINK_StartupObjs>
<BCC_GenerateUnicode Condition="'$(_TCHARMapping)'=='wchar_t'">true</BCC_GenerateUnicode>
<!-- Include Paths -->
<Win32LibraryPath Condition="'$(Win32LibraryPath)'==''">$(BDS)\lib</Win32LibraryPath>
<IncludePath Condition="'$(CBuilderIncludePath)'!=''">$(IncludePath);$(CBuilderIncludePath)</IncludePath>
<IncludePath Condition="'$(AdditionalIncludePath)'!=''">$(IncludePath);$(AdditionalIncludePath)</IncludePath>
<BCC_IncludePath Condition="'$(BCC_IncludePath)'!=''">$(BCC_IncludePath);$(IncludePath)</BCC_IncludePath>
<BCC_IncludePath Condition="'$(BCC_IncludePath)'==''">$(IncludePath)</BCC_IncludePath>
<BRCC_IncludePath Condition="'$(BRCC_IncludePath)'!=''">$(BRCC_IncludePath);$(IncludePath)</BRCC_IncludePath>
<BRCC_IncludePath Condition="'$(BRCC_IncludePath)'==''">$(IncludePath)</BRCC_IncludePath>
<DCC_IncludePath Condition="'$(DCC_IncludePath)'!=''">$(DCC_IncludePath);$(IncludePath)</DCC_IncludePath>
<DCC_IncludePath Condition="'$(DCC_IncludePath)'==''">$(IncludePath)</DCC_IncludePath>
<DCC_UnitSearchPath>$(DCC_IncludePath);$(Win32LibraryPath)</DCC_UnitSearchPath>
<DCC_ResourcePath>$(DCC_IncludePath)</DCC_ResourcePath>
<DCC_ObjPath>$(DCC_IncludePath)</DCC_ObjPath>
<TASM_IncludePath Condition="'$(TASM_IncludePath)'!=''">$(TASM_IncludePath);$(IncludePath)</TASM_IncludePath>
<TASM_IncludePath Condition="'$(TASM_IncludePath)'==''">$(IncludePath)</TASM_IncludePath>
然后我可以调用。
msbuild /t:build /p:AdditionalIncludePaths=C:\Foo\Include foo.groupproj
这个很好用,实现了我想要的功能。我只需要用相同的方法处理库路径就可以了。但是我不想像这样篡改Embarcadero提供的文件之一。这太荒谬了:P…难道没有官方属性可以设置来添加包含路径和库路径吗?
/p:IncludePath="C:\Foo;C:\Bar;C:\Another;$(IncludePath)"
。 - flydev