Comments (2)
use follwing cmake file will fix the above issuse.
cmake_minimum_required(VERSION 3.12)
Project name
project(clang-uml)
CMake standard defines
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_COMPILER /usr/local/Cellar/llvm/15.0.6/bin/clang++ CACHE FILEPATH "Path to C++ compiler")
set(CMAKE_VERBOSE_MAKEFILE OFF)
set(CMAKE_FIND_DEBUG_MODE OFF)
if(APPLE)
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
endif(APPLE)
clang-uml custom defines
set(CLANG_UML_INSTALL_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
set(CLANG_UML_INSTALL_BIN_DIR ${PROJECT_SOURCE_DIR}/bin)
set(UML_HEADERS_DIR ${PROJECT_SOURCE_DIR}/src/uml)
CMake build options
option(LINK_LLVM_SHARED "Should LLVM be linked using shared libraries or statically" ON)
#set(LLVM_CONFIG_EXECUTABLE "/usr/local/Cellar/llvm/15.0.6/lib/cmake/llvm" CACHE FILEPATH "Path to custom llvm-config executable")
set(LLVM_VERSION CACHE STRING "Path to custom llvm-config executable")
set(GIT_VERSION "0.3.0" CACHE STRING "clang-uml version")
#export CXX=/usr/local/Cellar/llvm/15.0.6/bin/clang++
Setup LLVM
message(STATUS "Checking for LLVM and Clang...")
if(LLVM_PREFIX)
message(STATUS "Using llvm-config from ${LLVM_CONFIG_PATH}")
set(LIBCLANG_LLVM_CONFIG_EXECUTABLE ${LLVM_CONFIG_PATH})
set(LLVM_CONFIG_BINARY ${LLVM_CONFIG_PATH})
endif(LLVM_PREFIX)
find_package(LLVM ${LLVM_VERSION} CONFIG REQUIRED)
list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR})
include(AddLLVM)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
message(STATUS "LLVM library dir: ${LLVM_LIBRARY_DIR}")
if(LINK_LLVM_SHARED)
set(LIBTOOLING_LIBS clang-cpp LLVM)
else(LINK_LLVM_SHARED)
set(LIBTOOLING_LIBS
clangLex
clangFrontend
clangSerialization
clangDriver
clangParse
clangSema
clangAnalysis
clangAST
clangBasic
clangEdit
clangLex
clangTooling
LLVMipo
LLVMScalarOpts
LLVMInstCombine
LLVMTransformUtils
LLVMAnalysis
LLVMTarget
LLVMOption
LLVMMCParser
LLVMMC
LLVMObject
LLVMBitReader
LLVMCore
LLVMSupport)
endif(LINK_LLVM_SHARED)
Setup threads library
find_package(Threads REQUIRED)
Setup yaml-cpp
message(STATUS "Checking for yaml-cpp...")
if(APPLE)
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(YAML_CPP yaml-cpp)
find_path(YAML_CPP_INCLUDE_DIR
NAMES yaml.h
PATHS ${YAML_CPP_INCLUDE_DIR} /usr/local/include/yaml-cpp)
find_library(YAML_CPP_LIBRARY
NAMES yaml-cpp
PATHS ${YAML_CPP_LIBRARIES} /usr/local/lib)
set(YAML_CPP_LIBRARY_DIR /usr/local/lib)
endif()
else(APPLE)
find_package(yaml-cpp REQUIRED)
endif(APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++17 -Wno-unused-parameter -Wno-unused-private-field")
disable the -werreor flag
#add_compile_options(-Werror -Wno-error=format-security)
link_directories(${LLVM_LIBRARY_DIR} ${YAML_CPP_LIBRARY_DIR})
Setup thirdparty sources
set(THIRDPARTY_HEADERS_DIR ${PROJECT_SOURCE_DIR}/thirdparty/)
Configure clang-uml executable version
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src/version)
configure_file(src/version.h.in ${PROJECT_BINARY_DIR}/src/version/version.h)
Handle various compiler quirks
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
execute_process(COMMAND gcc --print-file-name=include
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE GCC_STDDEF_INCLUDE)
message(STATUS "FOUND GCC STDDEF INCLUDE ${GCC_STDDEF_INCLUDE}")
include_directories(${GCC_STDDEF_INCLUDE})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${GCC_STDDEF_INCLUDE}")
endif()
message(STATUS "Using CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
Setup include directories
include_directories(${LLVM_INCLUDE_DIRS})
include_directories(${CLANG_UML_INSTALL_INCLUDE_DIR})
include_directories(${YAML_CPP_INCLUDE_DIRS})
include_directories(${UML_HEADERS_DIR})
include_directories(${THIRDPARTY_HEADERS_DIR})
include_directories(${PROJECT_SOURCE_DIR}/src/)
include_directories(${PROJECT_BINARY_DIR}/src/version)
Generate source list dynamically
file(GLOB_RECURSE SOURCES src/.cc include/.h)
set(MAIN_SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc)
list(REMOVE_ITEM SOURCES ${MAIN_SOURCE_FILE})
Define library target for linking with test cases and output executable
add_library(clang-umllib OBJECT ${SOURCES})
Define the target executable clang-uml
add_executable(clang-uml ${MAIN_SOURCE_FILE})
target_link_libraries(clang-uml
${YAML_CPP_LIBRARIES}
${LIBTOOLING_LIBS}
clang-umllib
Threads::Threads)
target_compile_features(clang-uml PRIVATE cxx_std_17)
Setup install options
include(GNUInstallDirs)
install(TARGETS clang-uml DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
Enable testing via CTest
option(BUILD_TESTS "" ON)
if(BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif(BUILD_TESTS)
from clang-uml.
use follwing cmake file will fix the above issuse.
cmake_minimum_required(VERSION 3.12)
Project name
project(clang-uml)
CMake standard defines
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_COMPILER /usr/local/Cellar/llvm/15.0.6/bin/clang++ CACHE FILEPATH "Path to C++ compiler")
set(CMAKE_VERBOSE_MAKEFILE OFF) set(CMAKE_FIND_DEBUG_MODE OFF) if(APPLE) set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) endif(APPLE)
clang-uml custom defines
set(CLANG_UML_INSTALL_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) set(CLANG_UML_INSTALL_BIN_DIR ${PROJECT_SOURCE_DIR}/bin) set(UML_HEADERS_DIR ${PROJECT_SOURCE_DIR}/src/uml)
CMake build options
option(LINK_LLVM_SHARED "Should LLVM be linked using shared libraries or statically" ON) #set(LLVM_CONFIG_EXECUTABLE "/usr/local/Cellar/llvm/15.0.6/lib/cmake/llvm" CACHE FILEPATH "Path to custom llvm-config executable") set(LLVM_VERSION CACHE STRING "Path to custom llvm-config executable") set(GIT_VERSION "0.3.0" CACHE STRING "clang-uml version")
#export CXX=/usr/local/Cellar/llvm/15.0.6/bin/clang++
Setup LLVM
message(STATUS "Checking for LLVM and Clang...") if(LLVM_PREFIX) message(STATUS "Using llvm-config from ${LLVM_CONFIG_PATH}") set(LIBCLANG_LLVM_CONFIG_EXECUTABLE ${LLVM_CONFIG_PATH}) set(LLVM_CONFIG_BINARY ${LLVM_CONFIG_PATH}) endif(LLVM_PREFIX)
find_package(LLVM ${LLVM_VERSION} CONFIG REQUIRED)
list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR}) include(AddLLVM)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") message(STATUS "LLVM library dir: ${LLVM_LIBRARY_DIR}")
if(LINK_LLVM_SHARED) set(LIBTOOLING_LIBS clang-cpp LLVM) else(LINK_LLVM_SHARED) set(LIBTOOLING_LIBS clangLex clangFrontend clangSerialization clangDriver clangParse clangSema clangAnalysis clangAST clangBasic clangEdit clangLex clangTooling LLVMipo LLVMScalarOpts LLVMInstCombine LLVMTransformUtils LLVMAnalysis LLVMTarget LLVMOption LLVMMCParser LLVMMC LLVMObject LLVMBitReader LLVMCore LLVMSupport) endif(LINK_LLVM_SHARED)
Setup threads library
find_package(Threads REQUIRED)
Setup yaml-cpp
message(STATUS "Checking for yaml-cpp...") if(APPLE) find_package(PkgConfig) if(PKG_CONFIG_FOUND) pkg_check_modules(YAML_CPP yaml-cpp) find_path(YAML_CPP_INCLUDE_DIR NAMES yaml.h PATHS ${YAML_CPP_INCLUDE_DIR} /usr/local/include/yaml-cpp) find_library(YAML_CPP_LIBRARY NAMES yaml-cpp PATHS ${YAML_CPP_LIBRARIES} /usr/local/lib) set(YAML_CPP_LIBRARY_DIR /usr/local/lib) endif() else(APPLE) find_package(yaml-cpp REQUIRED) endif(APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++17 -Wno-unused-parameter -Wno-unused-private-field")
disable the -werreor flag
#add_compile_options(-Werror -Wno-error=format-security)
link_directories(${LLVM_LIBRARY_DIR} ${YAML_CPP_LIBRARY_DIR})
Setup thirdparty sources
set(THIRDPARTY_HEADERS_DIR ${PROJECT_SOURCE_DIR}/thirdparty/)
Configure clang-uml executable version
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src/version) configure_file(src/version.h.in ${PROJECT_BINARY_DIR}/src/version/version.h)
Handle various compiler quirks
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") execute_process(COMMAND gcc --print-file-name=include OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GCC_STDDEF_INCLUDE) message(STATUS "FOUND GCC STDDEF INCLUDE ${GCC_STDDEF_INCLUDE}") include_directories(${GCC_STDDEF_INCLUDE}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${GCC_STDDEF_INCLUDE}") endif()
message(STATUS "Using CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
Setup include directories
include_directories(${LLVM_INCLUDE_DIRS}) include_directories(${CLANG_UML_INSTALL_INCLUDE_DIR}) include_directories(${YAML_CPP_INCLUDE_DIRS}) include_directories(${UML_HEADERS_DIR}) include_directories(${THIRDPARTY_HEADERS_DIR}) include_directories(${PROJECT_SOURCE_DIR}/src/) include_directories(${PROJECT_BINARY_DIR}/src/version)
Generate source list dynamically
file(GLOB_RECURSE SOURCES src/.cc include/.h) set(MAIN_SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc) list(REMOVE_ITEM SOURCES ${MAIN_SOURCE_FILE})
Define library target for linking with test cases and output executable
add_library(clang-umllib OBJECT ${SOURCES})
Define the target executable clang-uml
add_executable(clang-uml ${MAIN_SOURCE_FILE}) target_link_libraries(clang-uml ${YAML_CPP_LIBRARIES} ${LIBTOOLING_LIBS} clang-umllib Threads::Threads)
target_compile_features(clang-uml PRIVATE cxx_std_17)
Setup install options
include(GNUInstallDirs)
install(TARGETS clang-uml DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
Enable testing via CTest
option(BUILD_TESTS "" ON) if(BUILD_TESTS) enable_testing() add_subdirectory(tests) endif(BUILD_TESTS)
It's better use code block
from clang-uml.
Related Issues (20)
- Fix progress indicators when a source is repeated in a compile_commands.json
- Need a special version of clang to build or any other wrong? HOT 2
- Unable to set `query_driver` in `.clang-uml` HOT 1
- Error on build: ignoring attributes on template argument HOT 6
- Treat empty diagrams as errors
- Fix elements filter in sequence diagrams
- clang-uml cannot find libary files HOT 1
- Test clang-uml with latest 18.1.0 release HOT 1
- Class diagram contains empty packages
- Windows Defender Marks 0.5.1 exe Release as Virus HOT 5
- Library Unable to Find yaml-cpp Correctly on Windows (MSVC) HOT 2
- Build Fails with LLVM 18.x HOT 6
- When using the qt mingw compiler on windows, graphs are not generated successfully HOT 6
- When generating message comments in sequence diagrams, clang-uml directives are sometimes rendered
- `type_aliases` in sequence diagrams are not resolved in template function/method names
- Add option to `inline` lambda expressions
- Sequence diagrams should support CUDA
- Comments to call expressions in sequence diagrams should be attached to most external calls
- Add support for mxGraph XML diagram format (Diagrams.net)
- Refactor test cases to have a common test case logic for all diagram formats
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from clang-uml.