Are CMAKE_SOURCE_DIR and PROJECT_SOURCE_DIR the same in CMake?

There is a difference between these variables. CMAKE_SOURCE_DIR does indeed refer to the folder where the top-level CMakeLists.txt is defined. However, PROJECT_SOURCE_DIR refers to the folder of the CMakeLists.txt containing the most recent project() command.

For example, say you have a top-level project called Outer and this contains a subdirectory with its own project called Inner. Outer‘s CMakeLists.txt has:

project(Outer)
add_subdirectory(Inner)

and Inner‘s:

project(Inner)

Then in both of these CMakeLists files, CMAKE_SOURCE_DIR will refer to Outer‘s source dir. But while PROJECT_SOURCE_DIR for Outer is also this same dir, this is not the case for Inner. Inner‘s PROJECT_SOURCE_DIR is the subdirectory containing its CMakeLists.txt.

This difference applies to all PROJECT_<var> vs CMAKE_<var> variables.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)