2010-04-30 6 views
1

J'ai une solution Windows Driver Kit qui construit la DLL pour un pilote d'imprimante. Je convertis ensuite le binaire en code C et l'inclue dans ma source pour que la DLL puisse être extraite au moment de l'exécution et je n'ai pas besoin de distribuer deux fichiers, juste le fichier .exe.Comment exclure les fichiers sources des projets de studio visuel créés par cmake en fonction de l'architecture cible?

Cependant, je dois construire la DLL pour i386 et amd64 résultant dans deux dll, et donc deux fichiers c à inclure. Je peux vérifier au moment de la compilation pour quel fichier inclure, mais nous générons nos projets Visual Studio en utilisant cmake, et je voudrais inclure le bon fichier c dans le projet, et exclure l'autre. Cela permettra à la reconstruction de fonctionner, d'éviter les symboles dupliqués, etc.

Nous créons le projet Visual Studio en exécutant cmake pour "Visual Studio 9 2008" ou "Visual Studio 9 2008 Win64". Il ne semble pas possible de créer un projet Visual Studio pour les deux architectures, donc je pourrais simplement analyser "CMAKE_GENERATOR: INTERNAL = Visual Studio 9 2008" et ajouter à mon fichier cmakelists.txt la vérification appropriée.

Voici le fichier CMakeLists.txt pour le sous-projet en question

if(WIN32) 
project (StaticDriverLib) 

file(GLOB DriverLib_CPP *.cpp ../MasterInstallDir/*.cpp ../MasterInstallDir/amd64/*.cpp ../MasterInstallDir/i386/*.cpp) 
file(GLOB DriverLibLib_H *.hpp *.h ../MasterInstallDir/*.hpp) 

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../ ${CMAKE_CURRENT_SOURCE_DIR}/../MasterInstallDir) 

# static DriverLibLib library 
add_library(StaticDriverLibLib ${DriverLib_CPP} ${DriverLib_H}) 
add_dependencies(StaticDriverLib StaticLibCore) 
target_link_libraries(StaticDriverLib StaticCore Version.lib Setupapi.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib odbc32.lib odbccp32.lib) 

endif(WIN32) 

Comme vous pouvez le voir, il y a un i386 et un répertoire contenant les binaires amd64 codés spécifiques d'architecture. Comment est-ce que je teste le cmakelists.txt de sorte que l'un ou l'autre est exclu basé sur le générateur de cible? Pour 64 bits, nous supportons VS2008 et bientôt VS2010.

Répondre

2

Votre présomption est correcte, vous devez vérifier si vous compilez avec la prise en charge 64 bits et modifiez le répertoire glob de fichier en fonction de cela. La variable CMake CMAKE_CL_64 sera true/set si vous utilisez le compilateur Windows 64.

+0

Merci cela fonctionne bien. –

Questions connexes