Sử dụng CMake với GNU Make: Làm cách nào tôi có thể thấy các lệnh chính xác?


281

Tôi sử dụng CMake với GNU Make và muốn xem chính xác tất cả các lệnh (ví dụ như cách trình biên dịch được thực thi, tất cả các cờ, v.v.).

GNU make có --debug, nhưng dường như không hữu ích cho bất kỳ lựa chọn nào khác? CMake có cung cấp các cờ bổ sung trong Makefile được tạo cho mục đích gỡ lỗi không?


2
Hoặc, để thêm một số thuật ngữ tìm kiếm, Cách ẩn đầy đủ, dài dòng các dòng lệnh đã thực hiện và chỉ hiển thị đầu ra phần trăm màu yên tĩnh ngắn.
ulidtko


mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
ký sinh

Câu trả lời:


369

Khi bạn chạy make, hãy thêm VERBOSE=1để xem đầu ra lệnh đầy đủ. Ví dụ:

cmake .
make VERBOSE=1

Hoặc bạn có thể thêm -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONvào lệnh cmake cho đầu ra lệnh dài dòng từ Makefiles được tạo.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Để giảm một số đầu ra có thể ít thú vị hơn, bạn có thể sử dụng các tùy chọn sau. Tùy chọn CMAKE_RULE_MESSAGES=OFFloại bỏ các dòng như [33%] Đối tượng Building C ... , trong khi --no-print-directoryyêu cầu thực hiện để không in ra thư mục hiện tại lọc ra các dòng như make[1]: Entering directorymake[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory

12
Những giải pháp này làm cho nó quá dài dòng, in rất nhiều CMake và làm cho nội bộ không thú vị. Có cách nào để chỉ hiển thị các lệnh biên dịch và liên kết (tức là những gì thường liên quan đến các vấn đề gỡ lỗi). Có lẽ thậm chí chỉ hiển thị lệnh mà thất bại.
Tronic

Lượt truy cập hàng đầu của Google khuyến nghị "nếu bạn chỉ muốn xem các dòng lệnh g ++, bạn nên sử dụng grep & Co. - nếu có thể - liên quan đến Makefiles dài dòng" . Có lẽ các nhà phát triển với nhiều kinh nghiệm cmake có lời khuyên khác.
Trevor Boyd Smith

7
Nhân tiện, nếu bạn đang ở trên một nền tảng hỗ trợ thì nó sẽ cmake -GNinja . ; ninja -vhiển thị một đầu ra dài dòng rất đẹp với lông tơ tối thiểu.
richq 7/10/2015

10
Dòng đơn ...cmake --build . -- VERBOSE=1
letmaik

Rõ ràng, tôi phải làm việc với một phiên bản cmake mới hơn, bởi vì không có
tệp tạo tệp

80

Thật thuận tiện để đặt tùy chọn trong CMakeLists.txttệp là:

set(CMAKE_VERBOSE_MAKEFILE ON)

3
Xin đừng làm điều này cho các dự án của riêng bạn. Không phải tất cả người dùng của bạn có thể muốn xem đầu ra xây dựng dài dòng của bạn. Đừng ép buộc mọi người tiêu thụ thư viện của bạn. CMAKE_VERBOSE_MAKEFILE nên tắt theo mặc định và lựa chọn của người dùng, nếu họ cần, cho mục đích gỡ lỗi.
Ela782

3
Vì thế? Bạn luôn có thể thêm nó dưới dạng biến bộ đệm nếu bạn có nhiều nhà phát triển và muốn cho họ lựa chọn. Nhưng có, trong một phiên bản phát hành của một dự án, bạn nên tắt nó theo mặc định.
James Hirschorn

1
Đây là một tùy chọn tuyệt vời khi sử dụng qt.io QtCreator vì cmake được gọi bởi GUI. Cảm ơn bạn!
Grant Rostig

9

Hoặc đơn giản là xuất biến môi trường ĐỘNG TỪ trên vỏ như thế này: export VERBOSE=1


8

Nếu bạn sử dụng CMake GUI thì hoán đổi sang chế độ xem nâng cao và sau đó tùy chọn được gọi là CMAKE_VERBOSE_MAKEFILE.


Làm cách nào tôi có thể đặt tùy chọn này trong tệp văn bản mà không cần sử dụng GUI?
osgx

4

Tôi đã thử một cái gì đó tương tự để đảm bảo -ggdbcờ có mặt.

Gọi make trong một thư mục sạch và grep cờ bạn đang tìm kiếm. Tìm kiếm debughơn là ggdbtôi sẽ chỉ viết.

make VERBOSE=1 | grep debug

Các -ggdblá cờ là đủ che khuất mà chỉ có các lệnh biên dịch hiện lên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.