Table of Contents
Xây dựng C các ứng dụng biên dịch và chạy đáng tin cậy trên các cửa sổ, macOS, và Linux yêu cầu nhiều hơn mã nguồn xách tay nó yêu cầu một hệ thống xây dựng thích nghi với bản địa của mỗi nền tảng. C Make, một hệ thống xây dựng mã nguồn mở, giải quyết điều này bằng cách cho bạn định nghĩa dự án của bạn một lần trong một tập tin cấu hình đơn giản và sau đó tạo ra tập tin cụ thể xây dựng (công cụ, tập tin giải pháp hiển thị, các dự án X code, v. v. v. v.). Bài này cung cấp một hướng dẫn kỹ thuật mở, thực tế để tạo một hệ thống xây dựng chéo cho các dự án C, bao gồm mọi thứ từ thiết lập thiết lập cơ bản thiết lập, và kiểm soát phụ thuộc vào thiết lập, và đối chiếu qua đường dẫn.
Điều gì là sáng tạo?
Tạo ra là một hệ thống siêu tạo: nó không biên dịch trực tiếp mã nhưng tạo tập tin nhập cho các hệ thống xây dựng khác. Bạn mô tả dự án của bạn trong tập tin [FLT: 0] bằng ngôn ngữ đặc trưng miền. Hãy tạo ra nó để đọc và xuất ra các hướng dẫn xây dựng thích hợp cho nền tảng đích.
Đặc điểm chính của C Make bao gồm:
- Tác động của Unix, Windows, và macOS.
- Máy phát điện đa năng: Hỗ trợ, Ninja, Phòng thu trực quan, X code, và những thứ khác.
- Xây dựng nguồn sản xuất:) Giữ cho các đồ tạo tác khác với mã nguồn.
- [FLT: 0] Khả năng: Môđun, chức năng và vĩ mô cho phép xây dựng lại logic.
- Khám phá: [FLT:] ) định vị thư viện và người dẫn đầu.
- Hợp nhất với CI/CD: ) làm việc liên tục trong các đường ống tự động.
C Make đã trở thành tiêu chuẩn thực tế cho sự phát triển xuyên dạng chữ trong hệ sinh thái C và C++, được sử dụng bởi các dự án đa dạng như LLVM, MyQLL, và toàn bộ môi trường màn hình nền KDE.
Lợi ích của việc sử dụng C để phát triển chéo chữ C
Nhận C làm mang lại nhiều lợi thế cụ thể hơn là chỉ có thể đi qua cổng đơn giản:
- Nguồn lẽ thật điện tử:) Hãy viết một lần và tạo tập tin cho mỗi nền tảng, loại bỏ các tập tin vỏ bọc mỏng manh hoặc các tập tin làm nền tảng riêng biệt.
- Sự kết hợp tự nguyện có thể làm việc trong phòng thu trực quan, crution, Xc code, hoặc mã nguồn điện tử trong khi chia sẻ cùng .
- Cấu trúc dự án đồ thị:) Hãy dùng [FLT:] để chia các dự án lớn thành các thành phần có khả năng điều khiển với quan hệ phụ thuộc riêng của chúng.
- [FLT:] logic phối hợp:) Áp dụng các cờ nền tảng, tập tin nguồn, hoặc thư viện chỉ khi cần thiết, mà không cần phải phức tạp toàn bộ cấu hình.
- Xử lý phụ thuộc tự động:) và đơn giản hóa bằng thư viện thư viện thứ ba.
- Đang đóng gói và đóng gói: CTest và CPack được kết hợp chặt chẽ, làm cho nó không đáng kể để thêm các thử nghiệm và tạo ra các bộ cài đặt.
- Trình tạo ra Ninja kết hợp với CCache giảm đáng kể thời gian xây dựng lại.
- cộng đồng được thiết kế: bao quát [FLT:] [FLT:] và một hệ sinh thái phát triển của các mô-đun và các hướng dẫn.
Bắt đầu: Thiết lập C cho một dự án C
Phần này đi qua dòng làm việc hoàn chỉnh từ cài đặt đến một thực hiện được biên dịch trên ba nền tảng chính.
1. Cài đặt C Make
Tải nhị phân mới nhất từ [FLT: 0]c make.org [FLT: 1] hoặc sử dụng bộ quản lý gói hệ thống:
- Linux (Debian/Ubuntu): )
- macOS ( homebrew): )
- Cửa sổ: Chạy bộ cài đặt và bảo đảm “C Make hệ thống « Ứng dụng » của Hội đồng Thành phố cũng được chọn.
Phiên bản 3. 10 hoặc cao hơn được đề nghị để kiểm tra các tính năng được thảo luận ở đây.
2. Viết một bản sao nhỏ
Tạo một tập tin tên trong tên dự án gốc. Dưới là một ví dụ tối thiểu cho một dự án C mã nguồn đơn:
cmake_minimum_required(VERSION 3.10)
project(HelloWorld C)
add_executable(hello main.c)
Ngắt kết nối:
- Đặt phiên bản C Make tối thiểu. Điều này cũng cho phép cập nhật chính sách để cải thiện hành vi.
- định nghĩa tên và ngôn ngữ dự án. Việc xác định ngăn cản việc quét C Make from C++s prowers.
- nói C Make rằng mục tiêu nên được xây dựng từ .
Một ví dụ thực tế hơn thêm thắt cờ biên dịch và một phụ thuộc chỉ tiêu:
cmake_minimum_required(VERSION 3.15)
project(Calculator C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
add_executable(calc main.c parser.c)
target_include_directories(calc PRIVATE include)
Ở đây thêm vào con đường tìm kiếm đầu của bộ biên dịch chỉ cho mục tiêu .
3. Tạo tập tin xây dựng
Tạo thư mục xây dựng và chạy C Make:
mkdir build
cd build
cmake ..
Trên Linux/macOS, tùy chọn này tạo ra một Makefile theo mặc định. Trên Windows có Phòng thu trực quan được cài đặt, nó tạo một tập tin . Để yêu cầu một máy phát điện khác, hãy dùng .
Sau thế hệ, bạn có thể đưa ra các tùy chọn vào thời điểm cấu hình:
cmake .. -DCMAKE_BUILD_TYPE=Release -DMY_FEATURE=ON
Những biến này được lưu trữ trong và dùng lại sau đó.
4 Xây dựng dự án
Một khi tạo tập tin, biên dịch:
- Make/Ninja:) (làm việc trên mọi nền tảng và máy phát điện)
- Phòng thu vi tính:)
- Mã X
Lệnh là xuyên truyền và tránh các lệnh khẩn cấp cụ thể.
Công nghệ cao cấp C tạo ra các dự án thế giới thực
Ngoài những điều cơ bản, C Make cung cấp những tính năng mà luồng lớn hơn hoặc phức tạp hơn. Làm chủ những điều này sẽ tiết kiệm thời gian và giảm lỗi.
Quản lý các quan hệ phụ thuộc với tìm Gói
Lệnh định vị thư viện đã cài đặt và đặt biến cho chúng gồm đường dẫn và tập tin thư viện. Nguyên tắc hiện đại khuyến khích sử dụng [FLT: 0] mục đích để truyền bá quan hệ phụ thuộc sạch:
find_package(SDL2 REQUIRED)
target_link_libraries(my_app PRIVATE SDL2::SDL2)
Mục tiêu đã nhập tự động chứa thư mục, định nghĩa và liên kết. Nếu thư viện không cung cấp tập tin cấu hình « Tạo mô- đun Tìm kiếm ». Viết hay dựa vào các thư mục cộng đồng tại [FLT: 0] [FLT: 0]]] nhà tạo [FLT: 1].
Để dành cho các phụ thuộc không có cài đặt toàn hệ thống, tải về và tích hợp mã nguồn vào lúc cấu hình:
include(FetchContent)
FetchContent_Declare(
zlib
GIT_REPOSITORY https://github.com/madler/zlib.git
GIT_TAG v1.3
)
FetchContent_MakeAvailable(zlib)
target_link_libraries(my_app PRIVATE zlib)
Cách này đảm bảo việc tái sử dụng các phiên bản nhất định có thể xây dựng được.
Thêm các thử nghiệm với CTest
Kết hợp tích hợp qua CTest. Bật và xác định thử nghiệm trong ] của bạn ]:
enable_testing()
add_executable(test_parser test_parser.c)
target_link_libraries(test_parser PRIVATE parser_lib)
add_test(NAME ParserTest COMMAND test_parser)
Chạy thử ra:
ctest --output-on-failure
Chụp cắt lớp hỗ trợ việc cố định, nhãn, thời hạn và tiến hành song song. Để thử nghiệm toàn diện hơn, hãy cân nhắc kết hợp với khung thử nghiệm đơn vị như [FLT: 0] [FLT: 1] [FLT: 1] bằng cách liên kết thư viện của nó và .
Hoàn chỉnh chéo
Tạo tập tin phân loại chéo [FLT: 0] [FLT: 1]. Một tập tin công cụ có tên máy biên dịch, hệ thống và cấu trúc đích. Tạo một tập tin như ]:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_SYSROOT /path/to/sysroot)
Sau đó gọi C Make với các công cụchain:
cmake -DCMAKE_TOOLCHAIN_FILE=arm-cross.cmake ..
Tạo ra sẽ tự động sử dụng bộ biên dịch chéo và tìm kiếm bộ đồng bộ cho thư viện. Kĩ thuật này hoạt động với hệ thống nhúng, nền tảng di động, và bất kỳ trường hợp nào nơi máy xây dựng khác với máy đích. Chuyển sang chính thức [FLT: 0] để tìm chi tiết.
Cài đặt và lưu trữ
Dùng lệnh để xác định cách thực hiện dự án của bạn:
install(TARGETS my_app DESTINATION bin)
install(FILES config.ini DESTINATION etc)
CPack sau đó tạo ra các cài đặt: DEB, RPM, NXX, DMG v. v. v. thêm vào cuối :]:
include(CPack)
Chạy để tạo gói Debian. CPack thừa kế tất cả các quy tắc cài đặt và cho phép tùy chỉnh thông qua .
Những cạm bẫy thường gặp và những thực hành tốt nhất
Ngay cả những nhà phát triển kinh nghiệm cũng đã gặp rắc rối.
Thác hồ: Đường khó nhọc
Không bao giờ sử dụng đường dẫn tuyệt đối trong . Hãy dùng và tương đương với cây nguồn. Để chạy tập tin, hãy dùng để nhúng đường dẫn hoặc dựa vào thư mục cài đặt.
Thác: lơ đi biểu thức phát triển
Biểu thức trình tạo () đánh giá vào lúc xây dựng, không phải lúc cấu hình. Chúng cần thiết cho thiết lập trên mỗi đối tượng:
target_compile_definitions(my_app PRIVATE
$<$<CONFIG:Debug>:_DEBUG>
)
Điều này thêm chỉ để xây dựng gỡ lỗi. Tránh dùng vì máy phát điện đa đối (Visal Studio, X code) không được đặt vào thời điểm cấu hình.
Thác: Đang quá tải các lệnh toàn cầu
Lệnh như , , và ảnh hưởng đến mọi mục tiêu.
Thác hồ: Không dùng Phạm vị thích hợp để tìm gói tin
Đặt phạm vi thích hợp. Với thiết lập C hiện đại, thích và sau đó liên kết mục tiêu của nó. Đừng dùng và đặt liên kết bằng tay nếu không cần thiết.
Kết luận
C Make chuyển đổi thách thức của phát triển đa nền C đa nền tảng thành một quá trình có thể điều chỉnh được. Bằng cách viết một tập hợp các hướng dẫn xây dựng, bạn đạt được thành tích bản địa, ID hỗ trợ, và quản lý phụ thuộc mạnh mẽ trên tất cả các hệ điều hành lớn. Bắt đầu với một đơn giản và dần dần áp dụng các tính năng tiên tiến - kiểm tra, kết hợp chéo, đóng gói dự án tăng trưởng. Đầu tư học C Make trả tiền mỗi lần bạn xây dựng, kiểm tra hoặc triển khai trên một nền tảng khác nhau mà không cần thiết lập lại một dòng mã.