做國(guó)外的眾籌網(wǎng)站有哪些今日最新國(guó)內(nèi)新聞重大事件
目錄
- 一、問(wèn)題描述
- 二、問(wèn)題原因
- 三、解決方法
- 四、擴(kuò)展
- 五、通過(guò)CMake進(jìn)行配置
一、問(wèn)題描述
VS Code中主程序C文件引用了另一個(gè).h頭文件,編譯時(shí)報(bào)錯(cuò)找不到函數(shù)
主程序 main.c
#include <stdio.h>
#include "sumaa.h"int main(int, char**){printf("Hello, from aaa!\n");printf("Hello, %d", sumAA(11, 22));
}
工具文件 sumaa.h
int sumAA(int a, int b);
實(shí)現(xiàn)文件 sumaa.c
#include <stdio.h>
#include "sumaa.h"int sumAA(int a, int b)
{return a+b;
}
運(yùn)行,編譯報(bào)錯(cuò):
Starting build...
"C:\msys64\mingw64\bin\gcc.exe" -fdiagnostics-color=always -g "D:\uida0269\Desktop\aaa\main.c" -o "D:\uida0269\Desktop\aaa\main.exe"
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\uida0269\AppData\Local\Temp\ccOyf8me.o: in function `main':
D:/uida0269/Desktop/aaa/main.c:6: undefined reference to `sumAA'
collect2.exe: error: ld returned 1 exit statusBuild finished with error(s).
二、問(wèn)題原因
編譯報(bào)錯(cuò)時(shí)執(zhí)行的命令,簡(jiǎn)化如下
gcc.exe" -g main.c
所引用的 sumaa.c 并沒(méi)有被包含在編譯選項(xiàng)中
三、解決方法
修改 .vscode目錄下的 task.json
args中的 ${file} 表示當(dāng)前打開的文件,就是 main.c,我們?cè)诤竺嬖偌右粋€(gè) "sumaa.c"
,這樣的:
"args": ["-fdiagnostics-color=always","-g","${file}", "sumaa.c","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"
],
編譯通過(guò)。
Hello, from aaa!
Hello, 33
四、擴(kuò)展
如果引用了多個(gè)文件呢,不能一個(gè)個(gè)往里加吧
改為:*.c
"args": ["-fdiagnostics-color=always","-g","*.c","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"
],
驗(yàn)證過(guò),也是OK的
五、通過(guò)CMake進(jìn)行配置
具體的操作步驟,暫時(shí)不貼了,直接給出配置代碼
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.0)
project(aaa VERSION 0.1.0 LANGUAGES C)
file(GLOB SOURCES "*.c")add_executable(aaa ${SOURCES})set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
這樣配置后,用 CMake 運(yùn)行也是OK的。