2012-04-20 36 views
12

Tôi đã viết một tập tin CMakeLists.txt bao gồm 2 thực thi (target1target2):Cách chọn mục tiêu thực thi CMake nào sẽ là mục tiêu mặc định?

ADD_EXECUTABLE(target1 ${CXX_FILES}) 
TARGET_LINK_LIBRARIES(target1 ${requiredlibs}) 

ADD_EXECUTABLE(target2 ${CXX_FILES} ${OTHER_CXX_FILES}) 
TARGET_LINK_LIBRARIES(target2 ${requiredlibs}) 

Bây giờ mỗi khi tôi chạy thực hiện mà không bất kỳ thông số cả hai mục tiêu được xây dựng lại. Nhưng tôi muốn xác định target1 là tệp thực thi mặc định để chạy mà không có bất kỳ tham số nào chỉ xây dựng target1. Để xây dựng target2 Tôi sẽ chạy make target2.

Điều này có khả thi không?

Trong Makefile tạo ra bởi CMake có định nghĩa sau đây: default_target: tất cả

Tôi nghĩ mình cần một cách để thiết lập này default_target-target1.

Một vấn đề khác mà tôi có là làm cho luôn luôn xây dựng lại các mục tiêu, ngay cả khi không có tập tin nguồn đã được thay đổi.

Trả lời

11

Một ví dụ CMakeLists.txt mà những gì mà bạn yêu cầu:

ADD_EXECUTABLE(target1 a.c) 

ADD_EXECUTABLE(target2 EXCLUDE_FROM_ALL b.c) 

Đối với tôi nó không xây dựng lại các mục tiêu nếu các tập tin nguồn không bị thay đổi (hoặc thay đổi thời gian không thay đổi). Kết quả tôi nhận được:

$ make -f Makefile 
Scanning dependencies of target target1 
[100%] Building C object CMakeFiles/target1.dir/a.c.o 
Linking C executable target1 
[100%] Built target target1 
[$ make -f Makefile 
[100%] Built target target1 

Lưu ý rằng lần tạo thứ hai không xây dựng lại bất kỳ thứ gì.

(bạn có thể đọc CMake manual cho loại thông tin này)

+0

Cảm ơn câu trả lời nhanh và ví dụ của bạn. EXCLUDE_FROM_ALL đã giải quyết được sự cố của tôi. – user1346791

Các vấn đề liên quan