#cpp #visual_studio
Как в консольном приложении на C++ получить путь к текущему проекту ? Можно ли как-то использовать для этого переменные IDE, такие как $(TargetDir), например ?
Ответы
Ответ 1
Идём в настройки проекта. Далее: Configuration Properties->Debugging->Command Arguments. Жмём Edit... в этом поле, после чего появляется диалог. Выбираем Macros>>, далее выбираем нужный нам макрос и нажимаем Insert. Вам нужен $(ProjectDir). После этого, в коде, получить нужный нам параметр очень просто: #includeusing namespace std; int main(int argc, char** argv) { cout << argv[1] << "\n"; } Ответ 2
Вы можете написать внешний скрипт, к примеру на Python, который будет знать месте расположения вашего проекта. В процессе сборки проекта он пусть запускается первым и зная место расположения будет изменять *.cpp файл.Ответ 3
Если сборка проекта осуществляется через CMake, то можно использовать переменную CMAKE_CURRENT_SOURCE_DIR (абсолютный путь до директории, где расположен текущий CMakeLists.txt), либо переменную CMAKE_SOURCE_DIR (абсолютный путь до директории, где расположен корневой CMakeLists.txt). Если необходимо использовать значения этих переменных в исходном коде, то можно добавить следующую команду: target_compile_definitions(${target} PRIVATE RESOURCES_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/resources\") Теперь можно использовать макрос RESOURCES_DIR в коде.Ответ 4
Если нужно чтобы путь был известен при работе из IDE, то, как верно было указано в ответе @ixSci, можно передавать $(ProjectDir). Но как только приложение будет скомпилировано и перенесено на другой компьютер, работать это перестанет. Можно воспользоваться советом из ответа @sys_dev и написать внешний скрипт. А можно использовать стандартный макрос, который есть в любом уважающем себя компиляторе - __FILE__. Этот макрос после обработки препроцессором превращается в путь и имя текущего файла. Следует иметь в виду, что в GCC/MinGW будет путь и имя, а в MSVC++ - только имя. Чтобы MSVC++ выдала ещё и путь, нужно добавить компилятору параметр /FC (https://msdn.microsoft.com/en-us/library/b0084kay.aspx).
Комментариев нет:
Отправить комментарий