2013-08-22 30 views
6

Tôi muốn tạo một tệp dự án có thể làm việc cả với msvc và gcc.qmake: các tùy chọn xử lý cho cả gcc và msvc

Đối với các trường hợp, để tối ưu hóa tốc độ bạn sẽ làm cl /O2g++ -O3.

Nhưng tôi không biết cách trình bày tệp dự án để tạo sự khác biệt. Tôi muốn một cái gì đó như:

msvc:QMAKE_CXXFLAGS_RELEASE += /O2 /openmp /arch:AVX 
else:QMAKE_CXXFLAGS_RELEASE += -O3 -march=native -fopenmp -D_GLIBCXX_PARALLEL 

không hoạt động đáng buồn.

Cách khác là thay đổi mkspec và gộp gói mới bằng ứng dụng của tôi, nhưng nó không phải là rất di động. Cảm ơn!

+0

vấn đề là gì? Ý bạn là gì khi nói 'nó không có tác dụng đáng buồn'? – Bill

+0

Bạn đã thử sử dụng một phạm vi như 'win32' và'! Win32' như được mô tả trong tài liệu chưa? http://qt-project.org/doc/qt-4.8/qmake-advanced-usage.html –

+0

Nếu tôi thêm mã tôi đã đặt trước vào tệp dự án của mình, tôi vẫn sẽ có: 'cl -O3 -march = native -fopenmp -D_GLIBCXX_PARALLEL' trong khi tôi muốn 'cl/O2/openmp/arch: AVX' –

Trả lời

8

Jean, để được chính xác, bạn nên sử dụng này dựa trên mô tả của bạn:

msvc:QMAKE_CXXFLAGS_RELEASE += /O2 /openmp /arch:AVX 
gcc:QMAKE_CXXFLAGS_RELEASE += -O3 -march=native -fopenmp -D_GLIBCXX_PARALLEL 
+1

đúng! Có danh sách trình biên dịch định nghĩa ở đâu đó không? Như một ngày nào đó tôi muốn sử dụng tiếng kêu? (ngay cả khi tôi nghĩ rằng các tùy chọn tương thích với gcc, phải không?) –

+0

@ Jean-MichaëlCelerier: Vâng, bạn nói đúng: Ít nhất là bây giờ, Clang cố gắng có các tùy chọn tương thích với gcc, vì vậy không nên có vấn đề miễn là bạn không sử dụng bất kỳ tùy chọn kỳ lạ nào ...;) – mozzbozz

+0

@ Jean-MichaëlCelerier: Và theo câu hỏi đầu tiên của bạn: Tôi đã tìm kiếm một danh sách phạm vi biên dịch cho qmake ngay bây giờ trong một vài phút (tôi cũng cần nó) nhưng không thể tìm thấy bất cứ điều gì: -và tôi thấy rằng MinGW đơn giản là "mingw" (tương tự như "gcc" và "msvc" -> dễ đoán); Vì vậy, cho tiếng kêu tôi khá tự tin đó là "clang";) EDIT: Điều này có thể giúp: http://stackoverflow.com/questions/14523148/compiler-scope-values-in-qmake – mozzbozz

0

Đây là tệp dự án tôi đang sử dụng. Nó hoạt động cho Windows (MSVC) và Linux (gcc)

QT = core gui widgets 

HEADERS += \ 
    render.h 

SOURCES += \ 
    main.cpp \ 
    render.cpp 

QMAKE_CXXFLAGS_RELEASE -= -O 
QMAKE_CXXFLAGS_RELEASE -= -O1 
QMAKE_CXXFLAGS_RELEASE -= -O2 

win32 { # For Windows 
    QMAKE_CXXFLAGS += -openmp 
    QMAKE_CXXFLAGS += -arch:AVX 
    QMAKE_CXXFLAGS += -D "_CRT_SECURE_NO_WARNINGS" 
    QMAKE_CXXFLAGS_RELEASE *= -O2 
} 

linux { # For Linux 
    QMAKE_CXXFLAGS += -fopenmp 
    QMAKE_LFLAGS += -fopenmp 
    QMAKE_CXXFLAGS += -mavx 
    QMAKE_CXXFLAGS_RELEASE *= -O3 
} 
+0

Hmm, cách này tốt hơn so với bài đăng gốc? Ngoài ra, bạn không cần lõi và gui cho biến QT. Chúng được bao gồm theo mặc định! – lpapp

+0

Vâng cho một OP cho biết bài viết của ông đã không làm việc. Tôi đoán không có vấn đề gì cả. Nhưng tôi đã thử ví dụ của bạn. Nó không làm việc cho tôi. Tôi phải thêm vào GCC 'QMAKE_LFLAGS + = -fopenmp' nếu không tôi nhận được một loạt các lỗi liên kết (' lỗi: undefined tham chiếu đến omp_get_num_threads' và vv). –

+0

Vấn đề với câu trả lời này là bạn không thể sử dụng nó để phân biệt giữa MinGW và MSVC chẳng hạn ... – mozzbozz