2012-07-02 30 views
8

tôi có ba tập tin:cmake tạo ra một đối tượng chia sẻ

lib.c lib.h => Họ nên được xây dựng như là một file .so
client.c => Điều này cần được xây dựng như một thực thi.
Bên trong client.c Tôi bao gồm tệp lib.h để nhận được các khai báo của các hàm được xác định trong lib.c

Có thể ai đó cho tôi biết tệp CMakeLists chính xác mà tôi nên sử dụng để vùng nguồn là uncluttered với các tập tin tạm thời của Cmake và các tập tin nhị phân và các thư viện (.dll trong trường hợp của cửa sổ tôi tin) được tạo ra trong xây dựng riêng biệt và thư mục nhị phân?

Trả lời

4

cmake được xây dựng trên riêng biệt xây dựng các thư mục mặc định (tôi đã không kiểm tra ví dụ này):

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) 

Bạn làm:

mkdir build 
cd build 
cmake .. 
make 

Tất cả mọi thứ sẽ là dưới xây dựng.

+0

Có cách nào để làm xây dựng luôn luôn trong một thư mục mới mà không thực hiện các lệnh shell? Tôi googled nhưng không thể tìm thấy bất kỳ liên kết hữu ích. –

+0

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

+0

Có. Bạn có thể 'mkdir build & cd build & cmake .. & make'. Nếu bạn cần siêu sạch kho lưu trữ của mình, chỉ cần xóa thư mục xây dựng. Điều này cô lập các công cụ được tạo ra từ các nguồn ban đầu của bạn. – Stewart

11

Giải pháp này sẽ không tạo tệp .so, nhưng tương đương cmake để thêm vào với cmake.
tôi đang tìm kiếm một giải pháp với sẽ cung cấp tương đương như sau:

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

nào sẽ tạo ra một plugin_lib.so có thể được nạp tự động với dlopen khi chạy.

Giải pháp thiếu "chia sẻ" tùy chọn như vậy:

ADD_LIBRARY(mylib SHARED ${mylibSRCS}) 
+0

Câu trả lời được chấp nhận phải được cập nhật –

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