2011-02-11 14 views
9

Digamos que tengo un proyecto simple hola con el diseño del directorio pseudoestándarCMake con el diseño del directorio "estándar" (Linux)

helloworld/ 
    src/ 
    main.c 
    say.c 
    say-helper.c 
    include/ 
    say.h 
    say-helper.h 
    build/ 

y después de ejecutar

cd ~/helloworld/build 
cmake .. 
make 

que se puede esperar el siguiente

helloworld/ 
    build/lib/ 
    libsay.a 
    libsay.so 
    libsay.so.1.0.0 
    tmp/obj/ 
    main.o 
    say.o 
    build/bin/ 
    hello 

y después de make install yo esperaría

/usr/local/lib/ 
    libsay.a 
    libsay.so 
    libsay.so.1.0.0 
/usr/local/bin/ 
    hello 

¿Cómo se vería el CMakeLists.txt para esta configuración?

He estado buscando ejemplos, pero el único que he encontrado que muestra cómo agregar una biblioteca y un ejecutable no funcionó. Comandos

Respuesta

8

básico para describir el proyecto:

INCLUDE_DIRECTORIES(include) 
ADD_LIBRARY(say src/say.c src/say-helper.c) 

ADD_EXECUTABLE(hello src/main.c) 
TARGET_LINK_LIBRARIES(hello say) 

Esto es para la colocación de las librerías y el ejecutable en el directorio de construcción, puesto que en su CMakeLists.txt:

SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) 
SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) 
SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) 

Para instalar especifique

install(TARGETS say hello 
      RUNTIME DESTINATION bin 
      LIBRARY DESTINATION lib 
      ARCHIVE DESTINATION lib) 

en su CMakeLists.txt y establecer CMAKE_INSTALL_PREFIX a/usr/local en su co nfiguración.

No estoy seguro de si puede construir bibliotecas estáticas y dinámicas simultáneamente con el mismo nombre. Y no sé cómo decirle a CMake que coloque los archivos obj en una ubicación específica.

Cuestiones relacionadas