Tôi có một dự án C++ với lõi cơ bản là tự chứa nhưng có nhiều giao diện cho mã của bên thứ ba mà người dùng có thể hoặc không muốn biên dịch. Chúng tôi xây dựng mã bằng CMake và bây giờ tôi đang cố gắng tổ chức mã tốt hơn một chút.Làm thế nào để tổ chức hệ thống phân cấp tệp cmake với nhiều phụ thuộc tùy chọn
Giải pháp mà tôi đưa ra là thêm vào tệp CMakeLists.txt trên cùng một tập hợp các tùy chọn xác định liệu gói phụ thuộc có được đặt hay không.
option(WITH_FOO "Compile the interface to Foo, if found" ON)
option(REQUIRE_FOO "Require that the Foo interface to be compiled" OFF)
option(WITH_BAR "Compile the interface to Bar, if found" ON)
option(REQUIRE_BAR "Require that the Bar interface to be compiled" OFF)
...
if(WITH_FOO)
if(REQUIRE_FOO)
find_package(Foo REQUIRED)
else(REQUIRE_FOO)
find_package(Foo)
endif(REQUIRE_FOO)
else(WITH_FOO)
set(FOO_FOUND FALSE)
endif(WITH_FOO)
if(WITH_BAR)
if(REQUIRE_BAR)
find_package(Bar REQUIRED)
else(REQUIRE_BAR)
find_package(Bar)
endif(REQUIRE_BAR)
else(WITH_BAR)
set(BAR_FOUND FALSE)
endif(WITH_BAR)
Sau đó, trong các tập tin CMakeLists.txt trong các thư mục con, sẽ có những câu như:
if(BAR_FOUND)
add_subdirectory(bar_interface)
endif(BAR_FOUND)
tôi không đặc biệt như giải pháp này, một phần vì nó rất dài dòng và một phần bởi vì tôi cảm thấy rằng phải có một số cách chuẩn hóa hơn để làm điều này. Có ai biết về một giải pháp tốt hơn, dễ bảo trì hơn không?
Đẹp nhất! Tôi nghĩ rằng đó là nhiều hơn hoặc ít hơn những gì tôi cần. – Joel