Tôi đang cố gắng để có CMake hoặc chạy ba lệnh bash hoặc một tập lệnh bash. Tuy nhiên, tôi không thể làm cho nó hoạt động được.Chạy lệnh bash qua CMake
Các lệnh bash là:
cd ${CMAKE_SOURCE_DIR}/dependencies/library
make
cd ${CMAKE_BINARY_DIR}
Về cơ bản, tôi muốn CMake để xây dựng thư viện trong thư mục đó nếu nó chưa tồn tại.
Dưới đây là đoạn code CMake tôi đã cố gắng:
if(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
execute_process(COMMAND cd ${CMAKE_SOURCE_DIR}/dependencies/library)
execute_process(COMMAND make)
execute_process(COMMAND cd ${CMAKE_BINARY_DIR})
endif(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
Tuy nhiên, nó không được xây dựng bất cứ điều gì. Tôi đang làm gì sai?
Ngoài ra, trong khi tôi ở đây yêu cầu điều này: lệnh thứ ba, để chuyển sang thư mục nhị phân, có được bao gồm không?
Cảm ơn!
Trước hết, tại sao bạn không sử dụng tham số 'WORKING_DIRECTORY' thay vì các lệnh' cd'? Cái gì đó như 'execute_process (COMMAND make WORKING_DIRECTORY $ {CMAKE_SOURCE_DIR}/dependencies/library)'. Tôi cho rằng, các cuộc gọi 'execute_process()' không chia sẻ cùng một môi trường. Ngoài ra, nếu tôi là Bạn, tôi sẽ xem ['add_custom_target()'] (http://www.cmake.org/cmake/help/v3.0/command/add_custom_target.html?highlight=add_custom_target) và ['add_custom_command()'] (http://www.cmake.org/cmake/help/v3.0/command/add_custom_command.html?highlight=add_custom_command) cho loại điều này. – Kamiccolo
Tôi không thể bình luận về hầu hết những gì @Kamiccolo nói nhưng tôi có thể nói rằng tôi nghĩ rằng các chi tiết về 'execute_process' không chia sẻ nhà nước gần như chắc chắn là chính xác. Đó là * cực kỳ * có khả năng là 'cd' trong lệnh đầu tiên chỉ thay đổi thư mục cho quá trình đó và không cho bất kỳ thư mục nào khác. –
Nếu bạn có ý định xây dựng một thư viện của bên thứ ba, có lẽ bạn nên sử dụng mô-đun [ExternalProject] (http://www.cmake.org/cmake/help/v3.0/module/ExternalProject.html). – sakra