#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 не предоставляет никаких функций; Вы, конечно, можете реализовать логику самостоятельно, но это было бы нетривиально.