CMakeLists.txt 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. cmake_minimum_required(VERSION 3.16)
  2. project(DupFind VERSION 0.1.0 LANGUAGES CXX)
  3. set(CMAKE_CXX_STANDARD 20)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. # 最適化と popcnt 命令出力のためのフラグ設定
  6. if(MSVC)
  7. add_compile_options(/arch:AVX2)
  8. elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
  9. add_compile_options(-mpopcnt -msse4.2)
  10. endif()
  11. # Qt 6
  12. find_package(Qt6 COMPONENTS Widgets Concurrent REQUIRED)
  13. set(CMAKE_AUTOMOC ON)
  14. set(CMAKE_AUTOUIC ON)
  15. set(CMAKE_AUTORCC ON)
  16. # OpenCVの前にProtobufを自力で見つけさせる
  17. find_package(Protobuf REQUIRED)
  18. # OpenCV
  19. find_package(OpenCV REQUIRED)
  20. # SQLite3
  21. find_package(SQLite3 REQUIRED)
  22. include_directories(include)
  23. file(GLOB_RECURSE SOURCES src/*.cpp)
  24. file(GLOB_RECURSE HEADERS include/*.hpp)
  25. add_library(DupFindCore STATIC ${SOURCES} ${HEADERS})
  26. target_link_libraries(DupFindCore
  27. PUBLIC
  28. Qt6::Widgets
  29. Qt6::Concurrent
  30. ${OpenCV_LIBS}
  31. SQLite::SQLite3
  32. )
  33. # Filter out mains from the core library sources if possible, but CMake GLOB can't filter easily inline.
  34. # Better approach: remove them explicitly.
  35. get_target_property(CORE_SOURCES DupFindCore SOURCES)
  36. list(REMOVE_ITEM CORE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp")
  37. list(REMOVE_ITEM CORE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/CmdMain.cpp")
  38. set_target_properties(DupFindCore PROPERTIES SOURCES "${CORE_SOURCES}")
  39. # GUI target
  40. add_executable(${PROJECT_NAME} src/main.cpp)
  41. target_link_libraries(${PROJECT_NAME} PRIVATE DupFindCore)
  42. set_target_properties(${PROJECT_NAME} PROPERTIES
  43. WIN32_EXECUTABLE ON
  44. # MACOSX_BUNDLE ON
  45. )
  46. # CLI target
  47. add_executable(DupFindCmd src/CmdMain.cpp)
  48. target_link_libraries(DupFindCmd PRIVATE DupFindCore)