我有一个 CMakelist.txt,我在其中添加了外部头文件和库。我的构建文件。现在,当我在我的主函数中调用自定义标头(“myown.h”)时,我在运行 CMake 链接时遇到错误。
所以我发现我必须将我自己的头文件和.cpp 添加到带有 add_library 的库中,然后将它们添加到 target_link_libraries 下。
但是,只要我想从我自己的标头中调用代码,我就会在构建时遇到链接错误。
有谁知道错误在哪里或我该如何继续?这是我的 CMakelist:
cmake_minimum_required(VERSION 3.0.0)
project(MIELE_OCULUS VERSION 0.1.0)
#Hier weden die include files gefunden
INCLUDE_DIRECTORIES(
C:/Projekte/Cpp/dev/vcpkg/installed/x64-windows/include
)
#Hier werden die lib files gefunden
LINK_DIRECTORIES(
C:/Projekte/Cpp/dev/vcpkg/installed/x64-windows/lib,
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/um/x64
)
add_library(
test
testclass.h
testclass.cpp
)
add_executable(MIELE_OCULUS
main.cpp
)
TARGET_LINK_LIBRARIES(MIELE_OCULUS
cpprest_2_10
WS2_32
test
)
更新:
通过 CMakelist.txt 中的这些更改,您可以构建程序,但是在更改 src 代码或清理 CMake 项目后,将再次出现链接错误。
更改了 CMakelist:
cmake_minimum_required(VERSION 3.0.0)
project(MIELE_OCULUS VERSION 0.1.0)
add_library(
mylib
includes/mylib/testclass.h
includes/mylib/testclass.cpp
)
#Hier weden die include files gefunden
TARGET_INCLUDE_DIRECTORIES(mylib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
$<INSTALL_INTERFACE:include/mylib> # <prefix>/include/mylib
)
INCLUDE_DIRECTORIES(
C:/Projekte/Cpp/dev/vcpkg/installed/x64-windows/include
C:/Projekte/Cpp/dev/Miele_Oculus
)
#Hier werden die lib files gefunden
LINK_DIRECTORIES(
C:/Projekte/Cpp/dev/vcpkg/installed/x64-windows/lib
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/um/x64
)
add_executable(MIELE_OCULUS
main.cpp
)
TARGET_LINK_LIBRARIES(MIELE_OCULUS
cpprest_2_10
WS2_32
mylib
)
这是详细的输出:
Der Buildvorgang wurde am 01.11.2020 16:19:04 gestartet。Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\ALL_BUILD.vcxproj" auf Knoten "1" (Standardziele)。Das Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\ALL_BUILD.vcxproj" (1) erstellt "C:\Projekte\Cpp\dev\Miele_Oculus\b uild\ZERO_CHECK.vcxproj" (2) auf Knoten "1 “(标准)。InitializeBuildStatus:“x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”wird erstellt,da“AlwaysCreate”angegeben wurde。CustomBuild: Alle Ausgaben sind aktuell。FinalizeBuildStatus:Die Datei "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" wird gelöscht。在“x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate”中查看时间戳。Die Erstellung von Projekt "C:
Das Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\ALL_BUILD.vcxproj" (1) erstellt "C:\Projekte\Cpp\dev\Miele_Oculus\b uild\MIELE_OCULUS.vcxproj" (3) auf Knoten "1 “(标准)。Das Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\MIELE_OCULUS.vcxproj" (3) erstellt "C:\Projekte\Cpp\dev\Miele_Oculu s\build\mylib.vcxproj" (4) auf Knoten "1 “(标准)。InitializeBuildStatus:“mylib.dir\Debug\mylib.tlog\unsuccessfulbuild”wird erstellt,da“AlwaysCreate”angegeben wurde。CustomBuild: Alle Ausgaben sind aktuell。VcpkgTripletSelection:使用来自 "C:\Projekte\Cpp\dev\vcpkg\installed\x64-windows" 的三元组 "x64-windows" ClCompile: Alle Ausgaben sind aktuell。Lib: Alle Ausgaben sind aktuell。mylib.vcxproj -> C: \Projekte\Cpp\dev\Miele_Oculus\build\Debug\mylib.lib AppLocalFromInstalled: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -noprofile -File "C:\Projekte\Cpp\d ev\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "C:\Projekte\Cpp\dev\Miele_Oculus\build\Debug\mylib.lib" "C:\Projekte\Cpp\dev\vcpkg\installed\x64 -windows\debug\bin" "mylib.dir\Debug\mylib.tlog\mylib.write.1u.tlog" "mylib.dir\Debug\vcpkg.applocal.log" FinalizeBuildStatus: Die Datei "mylib.dir\Debug\ mylib.tlog\unsuccessfulbuild” wird gelöscht。将时间戳用于“mylib.dir\Debug\mylib.tlog\mylib.lastbuildstate”。Die Erstellung von Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\mylib.vcxproj" ist abgeschlossen (Standardziele)。lib AppLocalFromInstalled: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -noprofile -File "C:\Projekte\Cpp\d ev\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" " C:\Projekte\Cpp\dev\Miele_Oculus\build\Debug\mylib.lib" "C:\Projekte\Cpp\dev\vcpkg\installed\x64-windows\debug\bin" "mylib.dir\Debug\mylib .tlog\mylib.write.1u.tlog" "mylib.dir\Debug \vcpkg.applocal.log" FinalizeBuildStatus: Die Datei "mylib.dir\Debug\mylib.tlog\unsuccessfulbuild" wird gelöscht。将时间戳用于“mylib.dir\Debug\mylib.tlog\mylib.lastbuildstate”。Die Erstellung von Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\mylib.vcxproj" ist abgeschlossen (Standardziele)。lib AppLocalFromInstalled: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -noprofile -File "C:\Projekte\Cpp\d ev\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" " C:\Projekte\Cpp\dev\Miele_Oculus\build\Debug\mylib.lib" "C:\Projekte\Cpp\dev\vcpkg\installed\x64-windows\debug\bin" "mylib.dir\Debug\mylib .tlog\mylib.write.1u.tlog" "mylib.dir\Debug \vcpkg.applocal.log" FinalizeBuildStatus: Die Datei "mylib.dir\Debug\mylib.tlog\unsuccessfulbuild" wird gelöscht。将时间戳用于“mylib.dir\Debug\mylib.tlog\mylib.lastbuildstate”。Die Erstellung von Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\mylib.vcxproj" ist abgeschlossen (Standardziele)。exe -ExecutionPolicy 绕过 -noprofile -File "C:\Projekte\Cpp\dev\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "C:\Projekte\Cpp\dev\Miele_Oculus\build\Debug\mylib.lib " "C:\Proj ekte\Cpp\dev\vcpkg\installed\x64-windows\debug\bin" "mylib.dir\Debug\mylib.tlog\mylib.write.1u.tlog" "mylib.dir\Debug\ vcpkg.applocal.log" FinalizeBuildStatus: Die Datei "mylib.dir\Debug\mylib.tlog\unsuccessfulbuild" wird gelöscht。将时间戳用于“mylib.dir\Debug\mylib.tlog\mylib.lastbuildstate”。Die Erstellung von Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\mylib.vcxproj" ist abgeschlossen (Standardziele)。exe -ExecutionPolicy 绕过 -noprofile -File "C:\Projekte\Cpp\dev\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "C:\Projekte\Cpp\dev\Miele_Oculus\build\Debug\mylib.lib " "C:\Proj ekte\Cpp\dev\vcpkg\installed\x64-windows\debug\bin" "mylib.dir\Debug\mylib.tlog\mylib.write.1u.tlog" "mylib.dir\Debug\ vcpkg.applocal.log" FinalizeBuildStatus: Die Datei "mylib.dir\Debug\mylib.tlog\unsuccessfulbuild" wird gelöscht。将时间戳用于“mylib.dir\Debug\mylib.tlog\mylib.lastbuildstate”。Die Erstellung von Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\mylib.vcxproj" ist abgeschlossen (Standardziele)。"C:\Proj ekte\Cpp\dev\vcpkg\installed\x64-windows\debug\bin" "mylib.dir\Debug\mylib.tlog\mylib.write.1u.tlog" "mylib.dir\Debug \vcpkg .applocal.log" FinalizeBuildStatus: Die Datei "mylib.dir\Debug\mylib.tlog\unsuccessfulbuild" wird gelöscht。将时间戳用于“mylib.dir\Debug\mylib.tlog\mylib.lastbuildstate”。Die Erstellung von Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\mylib.vcxproj" ist abgeschlossen (Standardziele)。"C:\Proj ekte\Cpp\dev\vcpkg\installed\x64-windows\debug\bin" "mylib.dir\Debug\mylib.tlog\mylib.write.1u.tlog" "mylib.dir\Debug \vcpkg .applocal.log" FinalizeBuildStatus: Die Datei "mylib.dir\Debug\mylib.tlog\unsuccessfulbuild" wird gelöscht。将时间戳用于“mylib.dir\Debug\mylib.tlog\mylib.lastbuildstate”。Die Erstellung von Projekt "C:\Projekte\Cpp\dev\Miele_Oculus\build\mylib.vcxproj" ist abgeschlossen (Standardziele)。
InitializeBuildStatus: Aktualisieren des Timestamps von "MIELE_OCULUS.dir\Debug\MIELE_OCULUS.tlog\unsuccessfulbuild"。CustomBuild: Alle Ausgaben sind aktuell。VcpkgTripletSelection:使用来自 "C:\Projekte\Cpp\dev\vcpkg\installed\x64-windows" 的三元组 "x64-windows" ClCompile: Alle Ausgaben sind aktuell。链接:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\HostX64\x64\link.exe /ERR ORREPORT:QUEUE /OUT:"C:\ Projekte\Cpp\dev\Miele_Oculus\build\Debug\MIELE_OCULUS.exe" /INCREMENTAL /NOLOGO /LIBPATH:"C: /Projekte/Cpp/dev/vcpkg/installed/x64-windows/lib" /LIBPATH:"C:/ Projekte/Cpp/dev/vcpkg/installed/x64-windows/lib/Debug" /LIBPATH:C:/Program /LIBPATH:C:/Program/Debug /LIBPATH:C:/Projekte/Cpp/dev/Miele_Oculus/Files /LIBPATH:C: lib oleaut32.lib uuid.lib comdlg32.lib ib advapi32.lib "C:\Projekte\Cpp\dev\vcpkg\installed\x64-windows\debug\lib*.lib" /MANIFEST /MANIFESTUAC:"level='asIn voker 'uiAccess='false'" /manifest:embed /DEBUG /PDB:"C:/Projekte/Cpp/dev/Miele_Oculus/build/Debug/MIELE_OCULUS.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB :"C:/Projekte/Cpp/dev/Miele_Oculus/build/Debug/MIELE_OCULUS .lib" /MACHINE:X64 /machine:x64 MIELE_OCULUS.dir\Debug\main.obj 链接:致命错误 LNK1104: Datei "C:\Projekte \Cpp\dev\Miele_Oculus\build\Debug\MIELE_OCULUS.exe" [C:\Projekte\Cpp\dev\Miele_Oculus\build\MIELE_OCULUS.vcxproj] Die Erstellung des Projekts "C:\Projekte\Cpp\dev\Miele_Oculus\build\MIELE_OCULUS.vcxproj" ist abgeschlossen (Standardzi ele) -- FEHLER。
Die Erstellung des Projekts "C:\Projekte\Cpp\dev\Miele_Oculus\build\ALL_BUILD.vcxproj" ist abgeschlossen (Standardziele) -- FEHLER。
Fehler beim Buildvorgang。
"C:\Projekte\Cpp\dev\Miele_Oculus\build\ALL_BUILD.vcxproj" (Standardziel) (1) -> "C:\Projekte\Cpp\dev\Miele_Oculus\build\MIELE_OCULUS.vcxproj" (Standardziel) (3) -> (Link Ziel) -> LINK : 致命错误 LNK1104: Datei "C:\Projekte\Cpp\dev\Miele_Oculus\build\Debug\MIELE_OCULUS.exe" kann nicht geöffnet werden。[C:\Projekte\Cpp\dev\Miele_Oculus\build\MIELE_OCULUS.vcxproj]
0 Warnung(en)
1 Fehler
Verstrichene Zeit 00:00:00.90