Cmake founds bao gồm thư mục cho opengl, nhưng tiêu đề opengl nằm trong thư mục con được đặt tên khác nhau trên các nền tảng khác nhau (và, có thể, trình biên dịch): gl trên Windows, GL trên Linux , OpenGL (theo như tôi biết) trên Mac. Do đó, việc thêm OPENGL_INCLUDE_DIRECTORY để bao gồm các đường dẫn không giúp ích nhiều - tôi vẫn phải bao gồm (hoặc, v.v) trong các nguồn của mình. Tôi nên giải quyết nó như thế nào?CMake: opengl bao gồm dirs được đặt tên khác nhau trên các nền tảng khác nhau
Trả lời
Tôi giả sử bạn có nghĩa là OPENGL_INCLUDE_DIR
, không phải OPENGL_INCLUDE_DIRECTORY
.
Bạn có một vài lựa chọn ở đây. Cách đơn giản nhất là thêm ${OPENGL_INCLUDE_DIR}/GL
hoặc ${OPENGL_INCLUDE_DIR}/OpenGL
để bạn bao gồm những con đường tìm kiếm và sử dụng
#include "gl.h"
trong mã nguồn của bạn.
Trường hợp của tên tập tin được bỏ qua trên Windows, do đó bạn không cần phải sử dụng /gl
và/GL
- chỉ đơn giản là /GL
sẽ làm.
Để đạt được điều này, trong CMakeLists.txt bạn làm:
if(APPLE)
include_directories(${OPENGL_INCLUDE_DIR}/OpenGL)
else()
include_directories(${OPENGL_INCLUDE_DIR}/GL)
endif()
Để làm điều này mạnh mẽ hơn một chút, bạn có thể có CMake tìm đường dẫn đến "gl.h" và bao gồm rằng:
find_path(OpenglIncludeSubdir
NAMES gl.h
PATHS ${OPENGL_INCLUDE_DIR}
PATH_SUFFIXES GL OpenGL
NO_DEFAULT_PATH)
include_directories(${OpenglIncludeSubdir})
Một lần nữa, trong mã nguồn của bạn, bạn muốn sử dụng:
#include "gl.h"
Có thể mạnh mẽ nhất (tức là tránh xa hơn bao gồm các đường dẫn bên ngoài ${OPENGL_INCLUDE_DIR}
) sẽ tìm đường dẫn đến "gl.h" và sau đó sử dụng configure_file
để áp dụng cụm từ #include
chính xác. Bạn sẽ sử dụng một tập tin đầu vào trong đó có cái gì đó như:
#include "@[email protected]/gl.h"
và sau đó chạy configure_file
sẽ thay thế @[email protected]
với giá trị của nó và viết nội dung vào một tập tin đầu ra. tập tin đầu ra này sau đó sẽ được đưa vào mục tiêu của bạn và sẽ có
#include "GL/gl.h"
hoặc
#include "OpenGL/gl.h"
cho phù hợp.
Để đạt được điều này, bạn muốn làm điều gì đó như:
find_file(OpenglSubdir
NAMES GL OpenGL
PATHS ${OPENGL_INCLUDE_DIR}
NO_DEFAULT_PATH)
get_filename_component(OpenglSubdir ${OpenglSubdir} NAME)
configure_file(${CMAKE_SOURCE_DIR}/my_config.h.in ${CMAKE_SOURCE_DIR}/my_config.h)
Cảm ơn rất nhiều, có vẻ như tôi có rất nhiều giải pháp ngay bây giờ :) – lisyarus
Thật không may, có vẻ như điều này sẽ không hoạt động với Windows, vì CMake dường như không đặt 'OPENGL_INCLUDE_DIR' trên Windows. Đây có vẻ là một quyết định có chủ ý, dựa trên [danh sách gửi thư tháng 9 năm 2004 này] (https://cmake.org/pipermail/cmake/2004-September/005508.html), và có vẻ như điều đó đã không thay đổi thập kỷ can thiệp. – awksp
- 1. sử dụng trình bao để tải các phiên bản đá quý khác nhau cho các nền tảng khác nhau
- 2. Mã hóa SQLite khác nhau giữa các nền tảng
- 3. cmake bao gồm h tệp từ các thư mục khác
- 4. Tên tệp dành riêng cho các nền tảng khác nhau là gì?
- 5. Đối với lệnh "bao gồm" cmake, sự khác nhau giữa tệp và mô-đun là gì?
- 6. Có nền tảng nào mà con trỏ đến các loại khác nhau có kích thước khác nhau không?
- 7. Có cách nào để bản địa hóa một ứng dụng trên các nền tảng khác nhau
- 8. PHP bao gồm bên trong một bao gồm (thư mục khác nhau)
- 9. Bắt đặt cookie trên các tên miền khác nhau, với javascript hoặc khác
- 10. Mã C++ và Haskell khác nhau trong thời gian thực hiện trên các máy khác nhau
- 11. CMake nhiều khung công cụ và nền tảng mục tiêu
- 12. scons: src và bao gồm dirs
- 13. Cờ biên dịch khác nhau cho cùng một tệp trong các mục tiêu khác nhau
- 14. Cách đặt bố cục mẫu khác nhau cho các mô-đun khác nhau trong Symfony
- 15. Trạng thái hỗ trợ cho SHA-2 trong các nền tảng khác nhau là gì?
- 16. bao gồm các tệp tiêu đề từ các thư mục khác nhau?
- 17. Các cơ sở dữ liệu khác nhau có sử dụng báo giá tên khác nhau không?
- 18. Việc triển khai java.util.Random có khác nhau giữa các JRE hoặc nền tảng không?
- 19. C++ Trình tải ảnh nền tảng chéo cho OpenGL
- 20. SVN khác nhau trên 2 kho khác nhau
- 21. Các IP khác nhau trực tiếp đến các trang khác nhau trên IIS7
- 22. Sự khác nhau giữa các thẻ bao gồm và các thẻ nhúng trong expressionengine là gì?
- 23. ORDER BY trên các cột khác nhau theo các hướng khác nhau trong SQLite
- 24. C++: lớp khác nhau có cùng tên trong các đơn vị dịch khác nhau
- 25. Các trình duyệt khác nhau, các IP khác nhau?
- 26. Chọn các giá trị đáp ứng các điều kiện khác nhau trên các hàng khác nhau?
- 27. Đặt các thuộc tính vật liệu riêng biệt cho các đối tượng khác nhau trong OpenGL
- 28. Bố cục với các màu khác nhau
- 29. Lý do bao gồm các tập lệnh với hai cuộc gọi khác nhau là gì?
- 30. Clearing ngăn xếp bao gồm các hoạt động trong nhiệm vụ khác nhau
Bạn đã thử các lệnh 'find_package (OpenGL)'? Tôi không hiểu câu hỏi của bạn mà bạn đã làm hay không. – Morwenn
Tất nhiên là tôi đã làm. Nếu không có biến OPENGL_INCLUDE_DIRECTORY sẽ trống. – lisyarus
Ok, xấu của tôi, tôi không chắc chắn. Sau đó, tôi không nghĩ rằng có bất kỳ phương pháp chung chung bên cạnh việc buộc người dùng phải đổi tên thư mục của họ. Nhưng tôi thấy nó khá lạ: Tôi chỉ thấy thư mục 'GL', bất kể hệ điều hành nào. – Morwenn