Clion Add External Library [better] Info

One of the first hurdles every C++ developer faces when moving from a simple "Hello World" to a real-world project is dependency management. You need logging, networking, graphics, or maybe just a handy utility library. But how do you tell your IDE and compiler where to find these external libraries?

Example: Adding the popular fmt library:

You have two files: a header ( .h ) and a library binary ( .lib , .a , .so , .dylib ). You need to tell CMake both where to find the headers and which library file to link. # Tell compiler where headers are target_include_directories(my_app PRIVATE /path/to/library/include) Tell linker where the .lib file is target_link_libraries(my_app PRIVATE /path/to/library/lib/mylib.lib) For a shared library ( .dll / .so ): Same as above, but after building, you must ensure the .dll or .so is in the same folder as your executable or in your system PATH / LD_LIBRARY_PATH . The Cleaner Way: Using Variables set(MY_LIB_DIR "/usr/local/mylib") target_include_directories(my_app PRIVATE $MY_LIB_DIR/include) target_link_libraries(my_app PRIVATE $MY_LIB_DIR/lib/mylib.so) Pro tip: Use add_library(IMPORTED) for maximum control: clion add external library

include(FetchContent) FetchContent_Declare( fmt GIT_REPOSITORY https://github.com/fmtlib/fmt.git GIT_TAG master ) FetchContent_MakeAvailable(fmt) target_link_libraries(my_app PRIVATE fmt::fmt)

When you reload CMake in CLion, it will clone fmt , build it, and link it—all automatically. One of the first hurdles every C++ developer

If you’re using , JetBrains’ powerful cross-platform IDE, you have several excellent—and sometimes confusing—options. Do you manually edit CMakeLists.txt ? Use find_package ? Or point and click in the settings?

add_library(imported_mylib STATIC IMPORTED) set_target_properties(imported_mylib PROPERTIES IMPORTED_LOCATION "/path/to/libmylib.a" INTERFACE_INCLUDE_DIRECTORIES "/path/to/include" ) target_link_libraries(my_app PRIVATE imported_mylib) Best for: Popular libraries like Boost, OpenCV, Qt, or anything that provides a CMake config file. Example: Adding the popular fmt library: You have

vcpkg install fmt And use it in CMake like magic: