2010-05-02 39 views
7

tôi có thể đạt được điều này bằng gcc:Làm cách nào để nói với cmake không tạo cửa sổ bảng điều khiển?

gcc -mwindows -o simple simple.c 

Nhưng chỉ tìm thấy điều này trong cmake:

add_executable(simple WIN32 simple.c) 

Nhưng nó không hoàn toàn giống như -mwindows,

này sẽ yêu cầu điểm mấu chốt để là WinMain,

trong khi gcc -mwindows không yêu cầu điều này (có thể là)).

Tôi nên làm như thế nào?

+0

Đây là bản sao của http://stackoverflow.com/questions/2752792/whats-the-equivalent-of-gccs-mwindows-option-in-cmake. – MKroehnert

Trả lời

12

Nếu bạn sử dụng:

add_executable(simple WIN32 simple.c) 

sau đó bạn phải cung cấp một hàm WinMain. Đó là điều mà cờ WIN32 có thể thêm vào: có nghĩa là bạn sẽ biến nó thành một chương trình Windows, và cung cấp một hàm WinMain.

Tôi khuyên bạn nên thực hiện theo cách này nếu bạn thực sự đang viết một ứng dụng Windows. Đó là những gì có ý nghĩa nhất và phù hợp nhất với hệ điều hành cơ bản.

Tuy nhiên, nếu bạn vẫn muốn chuyển gcc cờ "-mwindows", nhưng vẫn sử dụng "main", sau đó chỉ cần thêm "-mwindows" vào giá trị CMAKE_CXX_FLAGS và/hoặc CMAKE_C_FLAGS. Bạn có thể làm điều này trong chương trình cmake-gui bằng cách điều chỉnh các biến tương tác bao gồm "-mwindows" hoặc bạn có thể làm điều đó với dòng lệnh CMake, như thế này:

cmake -DCMAKE_C_FLAGS="-mwindows" 
+0

Chỉ cần tìm thấy điều này và nó giải quyết được một vấn đề rất khó chịu của cmake cộng với một ứng dụng cửa sổ ít giao diện điều khiển. Đặc biệt, mong muốn loại bỏ giao diện điều khiển đã được thực hiện tốt trong dự án và sau khi ma thuật cmake đã được dệt. CẢM ƠN BẠN! – Darakian

1

Như DLRdave đã nói rằng ý chí thực thi là một win32 có nghĩa là nó sẽ có WinMain như là điểm vào và là một ứng dụng windows.

Nếu ứng dụng là nền tảng chéo thì phương tiện thông thường để chặn cửa sổ bảng điều khiển nhưng vẫn cho phép sử dụng chính là viết một thư mục WinMain như được tìm thấy trong thư viện SDL hoặc SFML mà chỉ cần gọi hàm chính với các biến toàn cục __argc và __argv làm đối số và trả về kết quả của nó.

Điều này ngăn ứng dụng không có cửa sổ bảng điều khiển nhưng giảm sự gián đoạn đối với mã phải sử dụng WinMain làm điểm vào.

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