Разница между переменными CMAKE_CURRENT_SOURCE_DIR и CMAKE_SOURCE_DIR? - PullRequest
0 голосов
/ 07 ноября 2018

, как я понял, эти переменные используются в случае, если проект состоит из подкаталогов, например, каждый подкаталог дополнительно имеет файлы CMakeLists.txt.

CMAKE_CURRENT_SOURCE_DIR

относится к пути исходного директора в процессе? и

CMAKE_SOURCE_DIR

относится к самому верхнему каталогу исходного кода? Я не уверен в этом.

1 Ответ

0 голосов
/ 07 ноября 2018

CMAKE_SOURCE_DIR - это то место, где изначально был вызван cmake, а CMAKE_CURRENT_SOURCE_DIR - то, где в данный момент работает cmake. Например, если вы используете команду add_subdirectory для включения зависимости в ваш проект, зависимость будет иметь свою собственную CMAKE_CURRENT_SOURCE_DIR, но CMAKE_SOURCE_DIR останется прежней.

Расширяя комментарии некоторых программистов, представьте, что у вас есть три следующих файла CMakeFiles в разных каталогах вашего проекта

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)

message("root dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("root dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")

add_subdirectory(sub1)
add_subdirectory(sub2)

sub1 / CMakeLists.txt

message("sub1 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub1 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")

sub2 / CMakeLists.txt

message("sub2 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub2 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")

Запуск cmake . в каталоге root дает мне этот вывод

root dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
root dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests
sub1 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
sub1 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
sub2 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
sub2 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub2

Теперь, если я запускаю cmake . в каталоге sub1 , я получаю одинаковое значение для обеих переменных:

sub1 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
sub1 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...