Tôi có một dự án nhỏ với một Makefile mà tôi đang cố gắng chuyển đổi sang CMake, chủ yếu chỉ để có được kinh nghiệm với CMake. Với các mục đích của ví dụ này, dự án có chứa một tệp nguồn (C++, mặc dù tôi không nghĩ ngôn ngữ đó có liên quan đặc biệt) và một tệp thư viện tĩnh mà tôi đã sao chép từ nơi khác. Giả sử vì lợi ích của đối số rằng mã nguồn tới thư viện không có sẵn; Tôi chỉ có tệp .a và tiêu đề tương ứng.Làm cách nào để yêu cầu CMake liên kết trong một thư viện tĩnh trong thư mục nguồn?
Makefile handmade My chứa build này quy tắc:
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
mà hoạt động tốt. Làm thế nào để tôi nói với CMake để tái sản xuất này? Không phải chính xác là makefile chính xác này, tất nhiên, nhưng cái gì đó bao gồm một lệnh liên kết tương đương. Tôi đã thử những cách rõ ràng nhưng ngây thơ, như
add_executable(main main.cpp libbingitup.a)
hoặc
add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)
cũng như những thứ khác nhau với link_directories(.)
hoặc add_library(bingitup STATIC IMPORTED)
vv nhưng không có gì cho đến nay mà kết quả trong một mối liên hệ thành công. Tôi nên làm gì đây?
Version chi tiết: CMake 2.8.7 trên Linux (Kubuntu 12.04) với GCC 4.6.3
Tuyệt vời, mà làm việc, cảm ơn! Có vẻ như một chút hackish phải đặt vào con đường đầy đủ một cách rõ ràng ở đây, nhưng tôi đoán đó chỉ là cách thức của CMake ... –
Tôi đồng ý rằng có vẻ như quá mức ở đây, nhưng chỉ định rõ ràng đường dẫn đầy đủ trả cổ tức nếu bạn có nhiều phiên bản khác nhau của cùng một cài đặt lib. – Fraser
Tuyệt vời, như thường lệ! Trong trường hợp của tôi, giải quyết một vấn đề của thư viện phụ thuộc vào một thư viện động được xây dựng khác mà là tùy thuộc vào một thư viện tĩnh: các thư viện phụ thuộc cũng đang cố gắng liên kết đến thư viện tĩnh này. – Antonio