Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Получение пути текущего проекта C++

#cpp #visual_studio


Как в консольном приложении на C++ получить путь к текущему проекту ? Можно ли как-то
использовать для этого переменные IDE, такие как $(TargetDir), например ?
    


Ответы

Ответ 1



Идём в настройки проекта. Далее: Configuration Properties->Debugging->Command Arguments. Жмём Edit... в этом поле, после чего появляется диалог. Выбираем Macros>>, далее выбираем нужный нам макрос и нажимаем Insert. Вам нужен $(ProjectDir). После этого, в коде, получить нужный нам параметр очень просто: #include using 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).

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

Отправить комментарий