Tôi đang sử dụng lệnh cmake trên các cửa sổ bằng Windows SDK và NMake MakefilesBiên dịch CMake với/MT thay vì/MD
Theo mặc định, nó biên dịch bằng trình chuyển đổi trình biên dịch/MD.
Làm cách nào để thay đổi nó để biên dịch bằng nút chuyển/MT?
Tôi đang sử dụng lệnh cmake trên các cửa sổ bằng Windows SDK và NMake MakefilesBiên dịch CMake với/MT thay vì/MD
Theo mặc định, nó biên dịch bằng trình chuyển đổi trình biên dịch/MD.
Làm cách nào để thay đổi nó để biên dịch bằng nút chuyển/MT?
Bạn có thể thay đổi CMAKE_CXX_FLAGS_<Build Type>
và/hoặc CMAKE_C_FLAGS_<Build Type>
biến:
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
Nếu cờ CMake của bạn đã chứa /MD
, bạn có thể đảm bảo rằng các lệnh trên được thực hiện sau điểm mà tại đó /MD
được chèn (việc thêm sau /MT
ghi đè tùy chọn hiện tại xung đột) hoặc bạn có thể đặt cờ từ đầu:
set(CMAKE_CXX_FLAGS_RELEASE "/MT")
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
.210
Hoặc cách khác, bạn có thể thay thế /MD
và /MDd
giá trị hiện có với /MT
và /MTd
tương ứng bằng cách làm một cái gì đó như:
set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()
thanh toán ucm_set_runtime - macro này sẽ thay thế những lá cờ cho runtime tĩnh hoặc động - để xem hiệu ứng sử dụng ucm_print_flags (cũng thanh toán this luồng ngăn xếp luồng)
Cảm ơn! Điều đó hoạt động. Dù sao để loại bỏ cờ '/ MD' cũ? – Josh
@Josh Tôi vừa cập nhật câu trả lời. Nếu nó vẫn không chính xác những gì bạn đang sau, hiển thị bit có liên quan của CMakeLists.txt của bạn và tôi chắc chắn sẽ có một câu trả lời gọn gàng. – Fraser
@Josh Tôi đã thực hiện một lỗi nhỏ trong lệnh 'string (REPLACE ...)' - nó đã được sửa. – Fraser