Извлечение командной строки из целевого объекта программно в cmake

#c #cmake

#c #cmake

Вопрос:

У меня очень просто CMakeLists.txt с одним исполняемым файлом на C :

 ... set libraries here
add_executable(main main.cpp)
  

Есть ли способ извлечь командную строку для компиляции main и сохранить ее в переменной cmake?

Мне удалось найти много «целевых» свойств (таких как LINK_LIBRARIES и INCLUDE_DIRECTORIES), но ни одного с полной командной строкой, и восстановление командной строки кажется чем-то очень сложным.

Примечание: я знаю, что cmake может быть подробным и печатать командные строки при компиляции, но я хочу сохранить это в переменной для другой цели (в configure_file команде для замены строки в сгенерированном файле).

Комментарии:

1. Извините, зачем вам это нужно? Я не знаю, что означает «cmake-настройка файла»

2. @hdf89shfdfs Мне нужна переменная, которая будет использоваться в configure_file команде. (это то, что я имею в виду cmake-configure .

3. Вы хотите, чтобы компиляция main.cpp или связывание основного? Я не знаю, как решить ваш вопрос, но человеку, которому может понадобиться знать эту информацию.

4. Я почти уверен, что это вообще невозможно, но я не уверен на 100%. При создании файлов проекта с помощью CMake вы можете выбрать несколько генераторов / компиляторов. Возможно, можно извлечь искомую информацию из файлов makefile, но вы, вероятно, не сможете этого сделать для проекта Visual Studio. Кроме того, cmake использует 2 этапа при настройке проекта: один этап настройки, считывающий файлы и устанавливающий данные в соответствующие структуры данных, и один этап генерации выходных файлов. Однако вы пытаетесь получить доступ к информации, вычисленной на втором этапе на первом.

5. Интерфейс командной строки для cmake должен быть одинаковым для всех платформ, и он позволяет вам указывать целевые объекты, которые вы хотите построить, поэтому определенно возможно сгенерировать сценарий cmake, который использует execute_process для вызова cmake соответствующие параметры командной строки в системе сборки. Если вы хотите сгенерировать скрипт, который задал бы исходный файл, скрипт и компилятор скомпилировали бы исходный код даже без cmake, доступного в системе: это afaik, для которого cmake не предоставляет никаких функций; Вы, конечно, можете реализовать логику самостоятельно, но это было бы нетривиально.