Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Learn Project Structure for Libraries | Building and Packaging Libraries
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
C++ Library Development

bookProject Structure for Libraries

When you begin developing a C++ library, how you organize your project's files has a big impact on maintainability, clarity, and ease of collaboration. A well-structured project makes it easier for users and contributors to understand where to find public headers, private implementation files, build scripts, and tests. The standard convention for C++ libraries is to separate source files (.cpp) and public header files (.h or .hpp). Typically, you will see a structure like this:

  • An include/ directory for all public headers you want users of your library to access;
  • A src/ directory for implementation files and any private headers;
  • A tests/ directory for unit tests and test data;
  • A CMakeLists.txt file (or similar build script) at the root, to define how the library is built.

This separation helps in several ways. Keeping public headers in include/ ensures that users only see the API you intend to expose, reducing accidental dependencies on internal details. Placing implementation files in src/ keeps your build clean and helps prevent users from including internal headers directly. Organizing tests separately makes it easier to automate testing and keep your main library codebase focused.

src/add.cpp

src/add.cpp

tests/test_add.cpp

tests/test_add.cpp

include/simplemath/add.h

include/simplemath/add.h

CMakeLists.txt

CMakeLists.txt

copy
12345678
#include "simplemath/add.h" namespace simplemath { int add(int a, int b) { return a + b; } }
Note
Note

As your library grows, you might split your src/ and include/ directories into subfolders for each module or component, or add directories for documentation, benchmarks, or integration tests. Consider using a docs/ directory for documentation and a benchmarks/ directory for performance tests. This modular approach keeps large projects manageable and helps new contributors navigate your codebase.

question mark

Why is it recommended to separate public headers into an include/ directory and implementation files into a src/ directory in a C++ library project?

Select the correct answer

Everything was clear?

How can we improve it?

Thanks for your feedback!

SectionΒ 2. ChapterΒ 1

Ask AI

expand

Ask AI

ChatGPT

Ask anything or try one of the suggested questions to begin our chat

bookProject Structure for Libraries

Swipe to show menu

When you begin developing a C++ library, how you organize your project's files has a big impact on maintainability, clarity, and ease of collaboration. A well-structured project makes it easier for users and contributors to understand where to find public headers, private implementation files, build scripts, and tests. The standard convention for C++ libraries is to separate source files (.cpp) and public header files (.h or .hpp). Typically, you will see a structure like this:

  • An include/ directory for all public headers you want users of your library to access;
  • A src/ directory for implementation files and any private headers;
  • A tests/ directory for unit tests and test data;
  • A CMakeLists.txt file (or similar build script) at the root, to define how the library is built.

This separation helps in several ways. Keeping public headers in include/ ensures that users only see the API you intend to expose, reducing accidental dependencies on internal details. Placing implementation files in src/ keeps your build clean and helps prevent users from including internal headers directly. Organizing tests separately makes it easier to automate testing and keep your main library codebase focused.

src/add.cpp

src/add.cpp

tests/test_add.cpp

tests/test_add.cpp

include/simplemath/add.h

include/simplemath/add.h

CMakeLists.txt

CMakeLists.txt

copy
12345678
#include "simplemath/add.h" namespace simplemath { int add(int a, int b) { return a + b; } }
Note
Note

As your library grows, you might split your src/ and include/ directories into subfolders for each module or component, or add directories for documentation, benchmarks, or integration tests. Consider using a docs/ directory for documentation and a benchmarks/ directory for performance tests. This modular approach keeps large projects manageable and helps new contributors navigate your codebase.

question mark

Why is it recommended to separate public headers into an include/ directory and implementation files into a src/ directory in a C++ library project?

Select the correct answer

Everything was clear?

How can we improve it?

Thanks for your feedback!

SectionΒ 2. ChapterΒ 1
some-alt