By Alex Mitchell | Estimated read time: 8 minutes
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. clion add external library
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?
The IDE’s CMake cache viewer will show you exactly where FetchContent stored the library ( cmake-build-debug/_deps/ ), and code navigation works instantly. Method 5: vcpkg – The Missing Package Manager Best for: Large, complex dependencies with many variants (OpenCV, PCL, CGAL). By Alex Mitchell | Estimated read time: 8
vcpkg install sdl2 Then in CMake:
Now go forth and link without fear! Have a library that just won’t cooperate? Drop the error message in the comments, and I’ll help you debug it. Or point and click in the settings
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: