[VS11] Projekteigenschaftsblaetter - CRT-Link-Art
-
Hi Leute,
ich habe heute mal mein Boost geupdatet auf die aktuellste Version und wollte es mir diesesmal etwas einfacher machen, was dessen Benutzung angeht. Bisher hatte ich immer einfach--build-type=completegemacht und musste dann aber fuer jede Konfiguration jeweils den Namen der Import-Libs aendern. Das war nervig, insbesondere, wenn man eine Library hinzufuegen musste und 4 verschiedene Build-Configurationen hatte - von der Mehrarbeit bei einem boost-Update ganz zu schweigen.Um mir das ganze jetzt zu erleichtern habe ich ein Build-Skript fuer Boost erstellt, was automatisch alle von mir benoetigten Konfigurations- und Platform-Varianten kompiliert und in seperate Verzeichnisse packt. Und den
layout-Parameter hab ich aufsystemeingestellt, um durchgaengig gleiche Namen zu haben.Jetzt muesste ich ja aber fuer jede Build-Konfiguration die Verzeichnisse von Hand aendern... Momentan habe ich das Problem mit folgendem Eigenschafts-Blatt geloest:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Label="Globals"> <IncludePath>$(BOOST_ROOT)\include;$(IncludePath)</IncludePath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <LibraryPath>$(BOOST_ROOT)\lib86\crtd\debug;$(LibraryPath)</LibraryPath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <LibraryPath>$(BOOST_ROOT)\lib64\crtd\debug;$(LibraryPath)</LibraryPath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <LibraryPath>$(BOOST_ROOT)\lib86\crtd\release;$(LibraryPath)</LibraryPath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <LibraryPath>$(BOOST_ROOT)\lib64\crtd\release;$(LibraryPath)</LibraryPath> </PropertyGroup> </Project>Mein Problem ist, dass diese Variante bisher immer die Boost-Libs, die dynamisch gegen die CRT linken waehlt. So kann ich ja schlecht statisch im Projekt dagegen linken. Ich weiss nicht, ob das ueberhaupt linken wuerde, aber selbst wenn: Ich muesste unbedingt die CRT wieder extra mitgeben.
Gibt es eine Moeglichkeit innerhalb von Projekt-Eigenschaftsblaettern die Konfiguration zu pruefen, ob dynamisch oder statisch gegen die CRT gelinkt wird?
So dass man also das Eigenschaftsblatt dahingehend umschreiben koennte, dass abhaengig davon$(BOOST_ROOT)\libXX\crtD/S\debugverwendet?Danke im voraus.
-
i.d.R. wird sowas dadudrch gemacht, dass man im Code in #ifdef macht und dann jeweils die passende LIB angibt, welche dann das passende Format hat. Die LIB muss sich dann natürlich im Dateinamen unterscheiden...
Also z.B.
#ifdef _MT #pragma comment(lib, "LIB_MT.lib") #else #pragma comment(lib, "MIB_MD.lib") #endifBeide LIBs liegen im gleichen Pfad und somit wird immer die passende gefunden...
Es gibt dann noch ergänzungen bzgl. Debug/Release und/oder Ansi/Unicode...#ifdef _MT #ifdef _UNICODE #ifdef _DEBUG #pragma comment(lib, "LIB_MTdu.lib") #else #pragma comment(lib, "LIB_MTu.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "LIB_MTd.lib") #else #pragma comment(lib, "LIB_MT.lib") #endif #endif #else #ifdef _UNICODE #ifdef _DEBUG #pragma comment(lib, "MIB_MDdu.lib") #else #pragma comment(lib, "MIB_MDu.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "MIB_MDd.lib") #else #pragma comment(lib, "MIB_MD.lib") #endif #endif #endif