2011-02-11 48 views
9

Hãy nói rằng tôi có một dự án chào đơn giản với cách bố trí thư mục giả chuẩnCMake với "tiêu chuẩn" bố trí thư mục (Linux)

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

và sau khi chạy

cd ~/helloworld/build 
cmake .. 
make 

Tôi mong chờ những điều sau đây

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

và sau make install Tôi mong đợi

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

Điều gì sẽ là CMakeLists.txt giống như thiết lập này?

Tôi đã xem xét các ví dụ, nhưng chỉ có một ví dụ tôi đã tìm thấy cho thấy cách thêm thư viện và tệp thi hành không hoạt động. lệnh

Trả lời

8

cơ bản để mô tả dự án:

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

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

này là dành cho việc đặt các libs và thực thi trong thư mục xây dựng, đưa rằng trong CMakeLists.txt của bạn:

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) 

Đối với cài đặt bạn chỉ định

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

trong CMakeLists.txt của bạn và đặt CMAKE_INSTALL_PREFIX thành/usr/local in your co nfiguration.

Tôi không chắc chắn liệu bạn có thể xây dựng các thư viện tĩnh và động cùng một lúc với cùng tên hay không. Và tôi không biết làm thế nào để nói với CMake để đưa các tập tin obj ở một số vị trí cụ thể.

Các vấn đề liên quan