2012-07-02 11 views
8

tengo tres archivos:cmake crear un objeto compartido

lib.c lib.h => Se debe construirse como un archivo .so
client.c => Esto debe ser construido como un ejecutable.
Dentro de la client.c incluyo el archivo lib.h a fin de obtener las declaraciones de las funciones definidas en lib.c

¿Puede alguien decirme el archivo CMakeLists exactos que debo utilizar para que el área de la fuente está despejado con los archivos temporales de Cmake y los binarios y las librerías (.dlls en el caso de las ventanas, creo) generados en directorios binarios y compilados separados?

Respuesta

4

Cmake se basa en directorios de construcción separados por defecto (no he probado este ejemplo):

PROJECT(myproject) 
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 

SET(mylibSRCS lib.c) 
SET(myprogSRCS client.c) 

ADD_LIBRARY(mylib ${mylibSRCS}) 
ADD_EXECUTABLE(myprog ${myprogSRCS}) 

TARGET_LINK_LIBRARIES(myprog mylib) 

lo hace:

mkdir build 
cd build 
cmake .. 
make 

Todo estaría bajo construcción.

+0

¿Hay una manera de hacer la acumulación siempre en un nuevo directorio sin ejecutar estos comandos shell? Busqué en Google pero no pude encontrar ningún enlace útil. –

+0

http://stackoverflow.com/questions/11143062/getting-cmake-to-build-out-of-source-without-wrapping-scripts/11144109#11144109 – Fraser

+0

Sí. Puedes 'mkdir build & cd build & cmake .. & make'. Si necesita super-limpiar su repositorio, simplemente elimine el directorio de compilación. Esto aísla las cosas generadas de sus fuentes originales. – Stewart

11

Esta solución no creará un archivo .so, sino un equivalente de cmake para una mayor inclusión con cmake.
Estoy buscando una solución con proporcionará el equivalente a esto:

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o 

que generará un plugin_lib.so que se puede cargar de forma dinámica con dlopen en tiempo de ejecución.

La solución no se encuentra la opción "compartida" de esta manera:

ADD_LIBRARY(mylib SHARED ${mylibSRCS}) 
+0

La respuesta aceptada debe actualizarse –

Cuestiones relacionadas