Я добавляю компонент, построенный с помощью CMake, в более крупный проект, который в настоящее время использует make-файлы. Существует один «конфигурационный» make-файл, который содержит некоторую логику, которая, среди прочего, устанавливает целевые каталоги в форме make-переменных. В конфигурации Makefiles включена в текущей сборке, установив окр вар MAKEFILES и фактические сборки Makefiles ссылки на эти varaibles при создании и ссылки на артефакты в этих каталогах, так, например:Использовать переменные makefile в сценарии CMake
# in config.mk
...
MY_TARGET_LIB_DIR=...
# in a build makefile
TGT_LIB=$(MY_TARGET_LIB_DIR)/libsomething.so
# in another build makefile
LDFLAGS=-L$(MY_TARGET_LIB_DIR)
То, что я хотел бы сделать использует это в make-файлах, сгенерированных CMake, т. е. CMake генерирует мне make-файл, который создает библиотеку (статический в этом случае) в каталоге, на который ссылается переменная MY_TARGET_LIB_DIR, а другая, которая ссылается на библиотеку в этом каталоге.
Я пытался сделать что-то вроде
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY $(MY_TARGET_LIB_DIR))
но не повезло - это только не вызывает Makefile генерироваться для вывода в подкаталог буквально под названием $(MY_TARGET_LIB_DIR)
. Есть ли решение для этого?
Вы, кажется, неправильно поняли мой вопрос - я не пытаюсь разбирать любые аргументы, переданные из оболочки. То, что я пытаюсь сделать, это использовать varaible, определенный в существующем make-файле, возможно, имея буквальную, неэкранированную строку '$ (variable_name)' в файле makefile, сгенерированном CMake. Передача значения через -D может быть решением, но как бы получить значение переменной? Должен ли я запускать CMake из make-файла для создания другого make-файла? – AndrzejJ
У меня вопрос, мой ответ был слишком коротким. С помощью -D вы можете просто использовать переменную, чтобы понять ваши файлы CMake. Но в целом вы не хотите запускать cmake (который настроен) для каждого запуска сборки. – usr1234567
Я знаю о -D, но мне нужно значение varaible, чтобы установить его, не так ли? Проблема в том, что я запускаю CMake из оболочки, и у меня нет значения оттуда - это переменная makefile, поэтому (если я не пропущу что-то), ее значение доступно только при запуске make (путем включения config.mk из моего примера). – AndrzejJ