2011-04-17 16 views
7

estoy trabajando en los guiones cmake para mi proyecto y me he encontrado con un problema:Uso DLL externa en cmake construir

Mi proyecto utiliza una biblioteca tercera parte (FreeImage), que tiene su propio Makefile- sistema de construcción basado Puedo construir FreeImage bien simplemente ejecutando "make" (estoy usando GnuWin32), que construirá FreeImage utilizando MinGW y producir:

FreeImage.lib 
FreeImage.dll 

Ahora mi problema es doble:

  1. quiero para ejecutar "make" desde mi script cmake.
  2. Quiero vincularme a la importación lib (FreeImage.lib) y también me aseguro de que la DLL se copie en el lugar correcto para que se ejecute el EXE.

Sé cómo vincular al archivo LIB, pero estoy perdido en el resto.

estructura de la carpeta es la siguiente:

MyProject      # main directory 
MyProject/Libs/FreeImage  # FreeImage root directory 
MyProject/Libs/FreeImage/Dist # This is where FreeImage outputs go (LIB and DLL) 

Por cierto: estoy corriendo en Windows 7. Tengo la intención de construir mi proyecto tanto con MSVC y MinGW.

Gracias!

EDIT: Ahora estoy tratando de usar ExternalProject_Add así:

ExternalProject_Add(
    FreeImage 
    PREFIX ./Libs/FreeImage 
    URL ./Libs/FreeImage 
    BUILD_COMMAND make 
) 

Esto me pone una parte del camino, pero no totalmente funciona ... se trata de configurar las cosas para mí y trata de utilizar nmake ... uf

Respuesta

2

en mi opinión, hay dos opciones:

en caso de que usted ha puesto sus fuentes FreeImage en fuente de árboles de sus proyectos, la opción más sencilla puede ser la de utilizar el execute_process() comando. Suponiendo FreeImage esté en la fuente de árboles de sus proyectos en '3rdparty/FreeImage /' se puede hacer algo así,

execute_process(COMMAND make WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/3rdParty/FreeImage) 

Opcionalmente, puede copiar el archivo DLL de 3RDPARTY/FreeImage/bin en el directorio bin es el propietario. Y entonces se puede escribir una FreeImageConfig.cmake para la importación de la biblioteca:

add_library (FreeImage importado) set_target_properties (FreeImage PROPIEDADES IMPORTED_LOCATION $ {} PROJECT_SOURCE_DIR/3RDPARTY/FreeImage/lib) ...

El otro La opción es hacer uso del módulo ExternalProject. También puede consultar this article de Kitware para obtener una descripción general de este módulo. En esencia, usted especifica la cadena completa de comandos necesarios para obtener la fuente, configurar la construcción, construir la fuente e instalarla. Todo en tu propio CMakeLists.txt

+0

Hola, gracias por la información. Creo que quiero usar el módulo ExternalProject, pero ... ugh ... es muy complicado. Tengo problemas incluso para comenzar :-( – sidewinderguy

+0

He decidido instalar mi propio sistema de compilación. Creo que esto será realmente más fácil que tratar de forzar a CMake a hacer cosas realmente incómodas. Gracias por la ayuda de todos modos. :-) – sidewinderguy

Cuestiones relacionadas