2016-03-03 44 views
7

Tôi muốn đổi tên một số tệp thi hành nhất định trong CMakeLists.txt nhưng cũng muốn liên kết tượng trưng từ tên cũ sang tệp mới để tương thích ngược. Làm thế nào điều này có thể được thực hiện trên các hệ thống hỗ trợ các liên kết tượng trưng?Liên kết tượng trưng CMake

Ngoài ra, các lựa chọn thay thế cho hệ thống không hỗ trợ liên kết tượng trưng là gì?

Cảm ơn

+1

'Ngoài ra lựa chọn thay thế cho những gì hệ thống không hỗ trợ liên kết tượng trưng? '- Sao chép tệp thay vì đổi tên. Hoặc tạo ra kịch bản/chương trình nhỏ với tên cũ, mà chỉ thực hiện chương trình với tên mới. – Tsyvarev

Trả lời

9

Bạn có thể tạo một mục tiêu tùy chỉnh và sử dụng CMake để tạo liên kết tượng trưng

ADD_CUSTOM_TARGET(link_target ALL 
        COMMAND ${CMAKE_COMMAND} -E create_symlink ${target} ${link}) 

này chỉ hoạt động trên các hệ thống hỗ trợ liên kết tượng trưng, ​​xem guide.

Khả dụng trên UNIX chỉ:

create_symlink cũ mới - tạo ra một liên kết tượng trưng mới -> cũ

+0

Về vấn đề trên Windows https://gitlab.kitware.com/cmake/cmake/issues/17461 – Sergei

6

Một cách khác để làm điều đó:

INSTALL(CODE "execute_process(\ 
    COMMAND ${CMAKE_COMMAND} -E create_symlink \ 
    ${target} \ 
    ${link} \ 
    )" 
) 

Bằng cách này, liên kết tượng trưng sẽ chỉ được thực hiện trong thời gian make install.

5

Một phương pháp đó là tiết hơn một chút và chỉ chạy trên cài đặt:

macro(install_symlink filepath sympath) 
    install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${filepath} ${sympath})") 
    install(CODE "message(\"-- Created symlink: ${sympath} -> ${filepath}\")") 
endmacro(install_symlink) 

Sử dụng nó như thế này (tương tự như ln -s):

install_symlink(filepath sympath) 
+0

Chính xác những gì tôi đã tìm kiếm. Cảm ơn nhiều. – warchantua

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