TheLartians / Format.cmake

💅 Stylize your code! Automatic clang-format and cmake-format targets for CMake.
Apache License 2.0
159 stars 25 forks source link

Cannot use if also using CPMAddPackage for LLVM dependency and building Clang #31

Open christopherbate opened 2 years ago

christopherbate commented 2 years ago

If a project uses CPM to pull in LLVM and builds the clang project of LLVM, then the target names clang-format and check-clang-format will conflict. Locally I fixed this by adding run- prefixes to each target.

TheLartians commented 2 years ago

Ah that makes sense, I hadn't considered the LLVM project when I created the target names. To not break existing workflows, perhaps it would make sense to add an option CMAKE_FORMAT_PREFIX that adds a prefix to the target names to avoid such collisions?

Thanks for raising the issue!

TheophileBlard commented 2 years ago

I have the same issue, triggered by find_package(Clang)

CMake Error at /usr/lib/llvm-10/lib/cmake/clang/ClangTargets.cmake:37 (message):
Some (but not all) targets in this export set were already defined.
Targets Defined: clang-format

My current fix is to add CPMAddPackage("gh:TheLartians/Format.cmake@1.7.3") at the end of my CMakeLists.txt, after the find_package(Clang) statement. Adding a CMAKE_FORMAT_PREFIX option would work, but I believe you should ultimately change the default name of the target (such name collision can happen really easily).