Trong trường hợp này, tôi khuyên bạn nên sử dụng một thư mục/xây dựng duy nhất. CMake có khả năng sẽ tạo ra các thư mục lib1, lib2 và lib3 riêng biệt trong đó.
Chuyển đổi giữa TĨNH vs chia sẻ có thể được thực hiện bằng cách sử dụng lá cờ BUILD_SHARED_LIBS (kiểm tra tài liệu add_library)
đối với các tổ chức CMakeLists.txt Với, sự lựa chọn là của bạn:
Bạn có thể tạo một CMakeLists.txt duy nhất có nhiều mục nhập add_library. Điều này có lợi ích mà bạn sẽ nhận được một CMakeLists.txt duy nhất, mà một số người có thể thích khi các dự án rất đơn giản.
Bạn có thể chia dự án của mình thành nhiều CMakeLists.txt được phân phối trên các thư mục lib1, lib2 và lib3 của bạn và sử dụng một cmakelists.txt gốc với add_subdirectory. Lợi ích của việc thiết lập này là việc tạo các tệp xây dựng với một cuộc gọi dễ dàng hơn (trong thư mục build/directory) của bạn, nhưng sau đó bạn có thể dễ dàng bước vào ví dụ: lib3/và gọi make/msbuild ở đó. CMake sẽ đảm bảo rằng sự phụ thuộc được xây dựng một cách chính xác
Ví dụ 1:
project(P)
# Setup lib1
set (LIB1_SOURCES ...) # Fill in your set of source-files here...
add_library(lib1 ${LIB1_SOURCES})
# Do similar for lib2 and lib3
target_link_libraries(lib2 lib1) # Indicate that lib1 is needed for lib2
target_link_libraries(lib3 lib1 lib2) # Indicate that lib2 and lib1 are needed for lib3
Ví dụ 2:
project(P)
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(lib3)
Trong mỗi thư mục con thì bạn viết CMakeLists.txt của bạn. Ví dụ. trong trường hợp lib3:
project(lib3)
set(LIB3_SOURCES ...) # Setup the list of sources here.
add_library(lib3 ${LIB3_SOURCES})
# You can refer to other libraries which should be available from the root cmakelists.
target_link_libraries(lib3 lib1 lib2)
Nguồn
2011-12-12 13:25:33
Tuyệt vời, cảm ơn bạn. – Cartesius00