Автоматически использовать каталог в качестве имени проекта в CMake
Я новичок в использовании CMake для управления моей системой сборки, поэтому, если я глуп, и это плохая идея, сообщите мне.
Я хотел бы настроить файл cmakelists.txt, чтобы при выполнении
project( ... )
имя каталога автоматически становится именем проекта. Я хочу сделать это, потому что мне удобнее копировать весь каталог одного проекта в качестве отправной точки другого. Однако, хотя я всегда переименовываю каталог в нечто значимое, я часто забываю изменить строку project(name)
файла cmakelists.txt, а затем я заканчиваю работу с несколькими проектами, открытыми в моей среде сборки с тем же именем, что запутывает.
В идеале, если в имени каталога есть пробелы, они заменяются символами подчеркивания.
Может ли CMake сделать это? И это плохая идея, по какой-то причине я не вижу?
Ответы
Ответ 1
Это можно сделать, добавив следующее к началу вашего CMakeLists.txt:
get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId})
Я не вижу проблемы с этим для проектов с отбросами, хотя, по моему мнению, производственные проекты обычно имеют предопределенное имя, которое будет явно указано в команде project
.
Когда вы упоминаете, что вы "копируете весь каталог одного проекта в качестве отправной точки другого", я полагаю, вы не включаете дерево сборки при копировании? CMake на самом деле не способен обрабатывать дерево сборки.
Ответ 2
Я думаю, что CMAKE_CURRENT_LIST_DIR больше подходит для этого случая
get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} C CXX)