Các dự án C++ của tôi bao gồm mã nguồn của thư viện của bên thứ ba (hiện tại là một mô-đun con git).Chỉ xây dựng thư viện bên ngoài một lần với CMake
Thư viện này được thêm vào dự án bởi các nhà lập pháp chính của chúng tôi thông qua việc sử dụng add_subdirectory
và sau đó thư viện được liên kết với mục tiêu chính.
Đây là một phiên bản thu gọn của tập tin cmake hiện tại của tôi:
add_subdirectory(foo)
set(FOO_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/libfoo/libfoo.so)
add_executable(target main.cpp)
add_dependencies(target foo)
target_link_libraries(target ${FOO_LIBRARY})
Thư viện này mất nhiều thời gian để xây dựng và, vì tôi không thay đổi mã của nó tôi cần nó được xây dựng chỉ một lần (mỗi build cấu hình). Nhưng khi tôi làm sạch và xây dựng lại mã của tôi, nó cũng làm sạch các tệp thư viện và biên dịch lại chúng.
Tôi đã cố gắng đặt thuộc tính CLEAN_NO_CUSTOM
trong thư mục của thư viện, nhưng theo tài liệu chỉ hoạt động cho mục tiêu lệnh tùy chỉnh.
Có cơ chế nào trong CMake thông qua đó có thể chỉ định rằng mục tiêu thư viện này chỉ cần được tạo một lần hoặc không được làm sạch bởi make clean
?
Vì bạn không sử dụng mục tiêu * nội bộ * của thư viện của bên thứ ba, có vẻ như cách tiếp cận với 'ExternalProject_Add' sẽ tốt hơn' add_subdirectory'. Vì 'ExternalProject_Add' không chỉ định các quy tắc rõ ràng, CMake sẽ không cố gắng dọn dẹp thư viện. – Tsyvarev