Я установил Microsoft VSCode под Linux Mint и открыл папку с именем test1, содержащую 3 файла:

test.cpp - предварительно объявляет foo() и bar(), затем вызывает обе функции в main()
. foo.cpp - определяет функцию foo()
bar.cpp - определяет функцию bar()

Когда я компилирую test.cpp (используя F5 Start debugging в VSCode), он терпит неудачу с неопределенной ссылкой на foo() и неопределенной ссылкой на bar(). Когда я компилирую foo.cpp и bar.cpp, они оба не работают с неопределенной ссылкой на main.

Я нашел VS Code не будет собирать программы на c++ с несколькими исходными файлами .ccp, как спрашивалось здесь ранее, из чего я узнал, что могу набрать следующее в окне "Терминала" VSCode...

g++ test.cpp foo.cpp bar.cpp -o a.out
./a.out

...и моя программа компилируется и запускается, как ожидалось (но я не могу выполнить отладку, очевидно).


Так что в первую очередь я хотел бы узнать, Как мне сказать VSCode скомпилировать и связать эти два дополнительных исходных файла?

Если это не будет ослепительно сложно, я также хотел бы получить рекомендации по переходу ко второй фазе моей задачи - компиляции foo и bar в файл "библиотеки", на который я смогу ссылаться при работе над проектом в папке test2 (родственной папке test1).

Если это вообще возможно, я хотел бы достичь этого полностью в контексте среды VSCode (возможно, я подумаю о том, чтобы изучить сложности g++ и makefiles когда-нибудь в будущем).

Ответы (2)

Сначала создайте файл a.out и измените файл /.vscode/lauch.json. В этом файле измените "program": "whatever" на "program": "${workspaceFolder}/a.out" и если есть "preLaunchTask": "C/C++: g++ build active file", то вырежьте эту строку, затем нажмите F5, и отладчик будет работать нормально.

Посмотрите здесь, чтобы получить больше разъяснений.

Я обнаружил, что для меня не особенно полезно переопределять выходной файл по умолчанию (из test) в a.out в соответствии с вопросом, на который я ссылался в своем OP. В итоге я просто изменил выделенный элемент в .vscode/tasks.json с...

.

"args": [
"-g",
"${file}",
"-o",
...

...к...

"args": [
"-g",
"*.cpp",
"-o",
....

Нажатие F5 в VSCode компилирует и запускает программу, как я и хотел. Но я упомяну еще одну вещь, которая показалась мне непонятной. Выходной файл программы просто записывается как test (без расширения) в папке test1 (вместе с 3 исходными файлами). Но когда я набрал test + ENTER в окне VSCode "Terminal", я не получил никакой ошибки, но я не получил ожидаемого вывода от моей программы.

Оказалось, что это произошло потому, что (a) я забыл ввести ./test и (b) в моей папке /usr/bin есть исполняемый файл с именем test (очевидно, что я тут ни при чем; он датирован более ранним временем, чем то, когда я установил Linux Mint!) Я понятия не имею, что должна делать эта тестовая программа, но она определенно не отображает Hello World так, как это делает моя тестовая программа!

2022 WebDevInsider