2016-07-08 32 views
6

Tôi đang phát triển một dự án C++ sẽ được đính kèm trên một dự án lớn hơn.Biên dịch một tệp duy nhất trong dự án CMake?

Tôi đã thấy rằng trên dự án lớn hơn (là ứng dụng Qt và nó được tạo từ qmake) Tôi có thể biên dịch một tệp từ dòng lệnh linux, chỉ cần nhập đường dẫn tương đối vào tệp cụ thể dưới dạng lập luận để thực hiện.

Mặt khác, tôi đang sử dụng CMake cho dự án của riêng mình. Khi tôi sửa đổi một số mã cho một đơn vị biên dịch và tôi phải sửa đổi tệp tiêu đề của nó, tôi phải đợi một thời gian dài để biên dịch các phụ thuộc của nó và sau đó là tệp nguồn riêng của nó. Nhưng có một số tình huống mà tôi muốn kiểm tra xem mã nguồn trong tệp * .cc có thể biên dịch mà không có lỗi hay không.

Có cách nào để tạo Makefile từ CMake theo cách qmake thực hiện việc này không? Chuyển sang qmake không còn là tùy chọn nữa.

+0

Hãy thử 'làm help' trên hiện CMake tạo của bạn makefile. Tôi khá chắc chắn rằng sẽ liệt kê làm thế nào để xây dựng chỉ là một tập tin đối tượng duy nhất. – John

Trả lời

3

Không, CMake không cung cấp hỗ trợ tích hợp để biên dịch các tệp đơn lẻ.

Bạn phải thêm mục tiêu cho từng tệp đối tượng, có thể bằng chức năng lặp qua tất cả các tệp của thư mục.

3

Không nằm ngoài hộp. CMake không phơi bày các quy tắc makefile "nội bộ" trong makefile chính.

Bạn chỉ có thể thực hiện việc này nếu bạn xem xét loại cấu trúc tệp mà CMake sử dụng trong nội bộ. Bạn có thể ví dụ: cho soạn thảo một đơn .obj file sử dụng CMake tạo makefiles gọi

make -f CMakeFiles/myProg.dir/build.make CMakeFiles/myProg.dir/main.cc.obj 

khi bạn có một cái gì đó giống như

cmake_minimum_required(VERSION 3.1) 

project(myProg CXX) 

file(WRITE "main.cc" "int main()\n{\nreturn 0;\n}") 
add_executable(myProg main.cc) 
6

Bạn không cần phải thêm mục tiêu tùy chỉnh thêm để script CMake của bạn, như Makefiles được tạo ra bởi CMake đã chứa các mục tiêu .o cho mỗi tệp .cc. Ví dụ. nếu bạn có một tệp nguồn được gọi là mySourceFile.cc, sẽ có một Makefile trong thư mục xây dựng của bạn xác định mục tiêu được gọi là <Some Path>/mySourceFile.cc.o. Nếu bạn cd vào thư mục xây dựng của mình, bạn có thể sử dụng grep hoặc ack-grep để tìm Makefile xác định mục tiêu này, sau đó cd vào thư mục của Makefile đó và tạo thư mục đó.

Ví dụ: giả sử lệnh ack-grep mySourceFile.cc.o in cái gì đó như:

foo/bar/Makefile 
119:x/y/z/mySourceFile.o: x/y/z/mySourceFile.cc.o 
123:x/y/z/mySourceFile.cc.o: 
124: # recipe for building target 

Sau đó, bạn có thể xây dựng mySourceFile.cc.o bằng cách thực hiện:

cd foo/bar && make x/y/z/mySourceFile.cc.o 
Các vấn đề liên quan