2012-01-19 48 views
6

Tôi có một lệnh tùy chỉnh trong một CMakeLists.txt:Tại sao CMake tiền tố dấu cách với dấu gạch chéo ngược khi thực thi lệnh?

set(testfiles "test1 test2") 
add_custom_target(testtouch COMMAND touch ${testfiles}) 

Khi tôi chạy "làm testtouch VERBOSE = 1" Tôi thấy rằng nó thực thi:

touch test1\ test2 

Đây chỉ là một ví dụ, nhưng Tôi có vấn đề này trong một dự án thực sự và "\" đang phá vỡ lệnh. Lưu ý rằng tôi nhận được biến (ở đây testfiles) từ một kịch bản Tìm và không thể loại bỏ các dấu ngoặc kép.

Tại sao CMake làm điều đó?

Làm cách nào để tránh?

Trả lời

5

Bởi vì đôi khi sự khác biệt giữa loại biến thể danh sách cmake và chuỗi chữ cmake trở nên quan trọng.

Cố gắng thay đổi thiết lập biến như sau để tránh các vấn đề:

set(testfiles "test1" "test2") 
+0

Cảm ơn bạn đã trả lời của bạn. Tôi không thể thay đổi thiết lập biến vì tôi nhận được nó từ tập lệnh khác. Tôi có thể thao tác biến theo một cách để đạt được điều tương tự không? – Barth

+0

Trả lời cho chính tôi: Tôi đã sử dụng dòng sau để nó hoạt động: string (REPLACE "" ";" testfiles $ {testfiles}) – Barth

+0

Điều này giữ cho các tùy chọn chuyển tiếp như "-o outfile". Không có cơ hội để vượt qua điều này như là một chuỗi; chúng ta cần phải cung cấp nó như là danh sách "-o; outfile", tuy nhiên ngược lại đó là. –

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