Files
hcanview/CMakeLists.txt
yemai 81bee50cd9 Initial commit: Complete USB2CAN cross-platform framework
Features:
- Cross-platform support (Windows/Linux/macOS)
- CAN and CANFD protocol support
- USB communication (WinUSB/libusb)
- Device management and configuration
- Message transmission and reception
- Filter configuration
- CMake build system
- Comprehensive examples and tests
2025-09-11 17:56:26 +08:00

180 lines
3.8 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
cmake_minimum_required(VERSION 3.10)
project(USB2CAN)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 添加编译选项
if(WIN32)
add_definitions(-DWIN32_LEAN_AND_MEAN)
add_definitions(-DNOMINMAX)
endif()
# 包含目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
# 查找所需的包
find_package(Threads REQUIRED)
# Windows特定的设置
if(WIN32)
# 添加WinUSB库
find_library(WINUSB_LIBRARY winusb)
if(NOT WINUSB_LIBRARY)
message(FATAL_ERROR "WinUSB library not found")
endif()
# 添加SetupAPI库
find_library(SETUPAPI_LIBRARY setupapi)
if(NOT SETUPAPI_LIBRARY)
message(FATAL_ERROR "SetupAPI library not found")
endif()
endif()
# Linux特定的设置
if(UNIX AND NOT APPLE)
# 查找libusb
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
# 查找libsocketcan
find_library(SOCKETCAN_LIBRARY socketcan)
if(NOT SOCKETCAN_LIBRARY)
message(WARNING "socketcan library not found, using direct socket access")
endif()
endif()
# macOS特定的设置
if(APPLE)
# 查找libusb
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
# 设置包含路径
include_directories(${LIBUSB_INCLUDE_DIRS})
# 在macOS上我们可能需要使用其他方式访问CAN设备
# 这里暂时使用Linux的实现作为基础
message(STATUS "Building for macOS, using Linux platform implementation as base")
endif()
# 源文件
set(PLATFORM_SOURCES
src/platform/Platform.cpp
)
# Windows特定的源文件
if(WIN32)
list(APPEND PLATFORM_SOURCES src/platform/WindowsPlatform.cpp)
endif()
# Linux特定的源文件
if(UNIX AND NOT APPLE)
list(APPEND PLATFORM_SOURCES src/platform/LinuxPlatform.cpp)
endif()
# macOS特定的源文件
if(APPLE)
# 在macOS上我们可以使用Linux平台的实现作为基础
list(APPEND PLATFORM_SOURCES src/platform/LinuxPlatform.cpp)
endif()
set(USB_SOURCES
src/usb/UsbDevice.cpp
)
# Windows特定的USB源文件
if(WIN32)
list(APPEND USB_SOURCES src/usb/WinUsbDevice.cpp)
endif()
# Linux特定的USB源文件
if(UNIX AND NOT APPLE)
list(APPEND USB_SOURCES src/usb/LinuxUsbDevice.cpp)
endif()
# macOS特定的USB源文件
if(APPLE)
# 在macOS上我们可以使用Linux平台的实现作为基础
list(APPEND USB_SOURCES src/usb/LinuxUsbDevice.cpp)
endif()
set(CAN_SOURCES
src/can/CanController.cpp
src/can/CanMessage.cpp
src/can/CanFdController.cpp
)
set(DEVICE_SOURCES
src/device/Usb2CanDevice.cpp
src/device/DeviceManager.cpp
)
set(API_SOURCES
src/api/Usb2Can.cpp
)
# 创建静态库
add_library(usb2can STATIC
${PLATFORM_SOURCES}
${USB_SOURCES}
${CAN_SOURCES}
${DEVICE_SOURCES}
${API_SOURCES}
)
# 链接库
target_link_libraries(usb2can
Threads::Threads
)
# Windows特定的链接库
if(WIN32)
target_link_libraries(usb2can
${WINUSB_LIBRARY}
${SETUPAPI_LIBRARY}
)
endif()
# Linux特定的链接库
if(UNIX AND NOT APPLE)
target_link_libraries(usb2can
${LIBUSB_LIBRARIES}
)
if(SOCKETCAN_LIBRARY)
target_link_libraries(usb2can
${SOCKETCAN_LIBRARY}
)
endif()
endif()
# macOS特定的链接库
if(APPLE)
target_link_libraries(usb2can
${LIBUSB_LIBRARIES}
)
# 在macOS上我们可能需要链接其他库
# 这里暂时使用Linux的实现作为基础
endif()
# 添加示例
add_subdirectory(examples)
# 添加测试
option(BUILD_TESTS "Build tests" OFF)
if(BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
# 安装规则
install(TARGETS usb2can
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
install(DIRECTORY include/
DESTINATION include
)