2016-01-28 15 views
5

Tôi đang gặp khó khăn khi hiểu CMake. Những gì tôi muốn làm là thực hiện lệnh bash sau trong quá trình xây dựng:Thực hiện các lệnh bash từ một tệp CMake

date +"%F %T" > timestamp

này fetches ngày hiện tại và ghi nó vào một tập tin. Tuy nhiên, tôi không thể tái tạo hành động đơn giản này bằng cách sử dụng lệnh CMake.

Dưới đây là một vài điều mà tôi đã cố gắng:

execute_process(COMMAND "date +'%F %T' > timestamp")

add_custom_command(OUTPUT timestamp COMMAND date +"%F %T")

file(WRITE timestamp date +"%F %T")

Không có vẻ làm việc. Tôi gần như tự hỏi nếu họ thậm chí đang được thực hiện ở tất cả.

Tôi có kiến ​​thức rất hạn chế về cách CMake và cú pháp của nó, vì vậy tôi có thể làm những việc rất sai. Tôi hy vọng ai đó có thể chỉ cho tôi đi đúng hướng. Cảm ơn!

+1

Bạn không thể sử dụng '>' trong đó ... http://stackoverflow.com/a/31523634/2836621 –

+0

trùng lặp có thể xảy ra của [Làm thế nào để có được cmake để tạo tập tin dấu thời gian sau khi xây dựng/liên kết thực tế? (không làm gì nếu thực thi không thay đổi)] (http://stackoverflow.com/questions/13419255/how-to-get-cmake-to-create-timestamp-file-after-an-actual-build-link- do-nothin) – Tsyvarev

Trả lời

5

Tôi nghĩ vấn đề chính của tôi là thiếu báo giá xung quanh các đối số lệnh của tôi. Ngoài ra, nhờ @ Mark Setchell tôi nhận ra tôi nên sử dụng OUTPUT_VARIABLE thay OUTPUT

Dù sao đi nữa, đây là câu trả lời tôi đến tại địa chỉ:

execute_process (
    COMMAND bash -c "date +'%F %T'" 
    OUTPUT_VARIABLE outVar 
) 

này lưu trữ các kết quả của lệnh bash vào biến outVar

file(WRITE "datestamp" "${outVar}") 

Và đây viết nội dung của outVar vào một tập tin gọi là "dấu ngày tháng".

+1

Thực hiện tốt để làm việc và chia sẻ kết quả của bạn. Bạn cũng có thể chấp nhận câu trả lời của riêng mình :-) –

0

Lưu ý -Sử dụng bash -c cũng sẽ chuẩn bị-kết thúc một dòng mới kết thúc của biến đó sẽ gây ra làm cho khiếu nại tùy thuộc vào cách bạn đang sử dụng nó

build.make: *** mất tích dấu phân cách. Dừng lại.

này nên giải quyết trên

execute_process(COMMAND which grpc_cpp_plugin OUTPUT_VARIABLE GRPC_CPP_PLUGIN) 
string(STRIP ${GRPC_CPP_PLUGIN} GRPC_CPP_PLUGIN) 
message(STATUS "MY_VAR=${GRPC_CPP_PLUGIN}") 
Các vấn đề liên quan