我正在学习Cmake并在简单的C项目中添加库项目。我创建了一个具有以下结构的简单库项目。
MyLibraryProjectDirectory
|
-- library.C
-- library.h
-- UmerDir
|
-- Umer.h
-- Umer.c
Cmakelist.txt正在生成我正在另一个C程序中使用的.a lib
文件。
C程序的结构如下:
MyCProgram
|
-- main.c
-- libuntitled.a
libuntitled.a
是我的库项目中由CmakeList.txt生成的库文件。
问题是当我尝试使用.a
文件构建C项目时,它会抛出以下内容
错误 :
"C:\Program Files\JetBrains\CLion 2017.2\bin\cmake\bin\cmake.exe" --build C:\Users\Lenovo\CLionProjects\AppProject\cmake-build-debug --target AppProject -- -j 2
[ 50%] Linking C executable AppProject.exe
C:/mingw-w64/i686-7.1.0-posix-dwarf-rt_v5-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.1.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -llibuntitled
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [AppProject.exe] Error 1
CMakeFiles\AppProject.dir\build.make:95: recipe for target 'AppProject.exe' failed
mingw32-make.exe[2]: *** [CMakeFiles/AppProject.dir/all] Error 2
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/AppProject.dir/all' failed
mingw32-make.exe[1]: *** [CMakeFiles/AppProject.dir/rule] Error 2
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/AppProject.dir/rule' failed
mingw32-make.exe: *** [AppProject] Error 2
Makefile:117: recipe for target 'AppProject' failed
我不确定我做错了什么,所以请原谅我在CMake和C构建系统方面非常有限的知识。
为方便起见,我还附上了C程序和C库项目的屏幕截图。
图书馆计划截图:
C计划项目:
编辑:
我通过在.a库名称之前添加${CMAKE_SOURCE_DIR}
来修复未找到库的问题。显然Cmake需要完整的分类路径才能找到.a文件,即使在同一个目录中也是如此,这有点奇怪。无论如何,现在我收到以下错误:
错误:
"C:\Program Files\JetBrains\CLion 2017.2\bin\cmake\bin\cmake.exe" --build C:\Users\Lenovo\CLionProjects\AppProject\cmake-build-debug --target AppProject -- -j 2
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/AppProject.dir/all' failed
mingw32-make.exe[3]: *** No rule to make target '../libuntitled', needed by 'AppProject.exe'. Stop.
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/AppProject.dir/rule' failed
mingw32-make.exe[2]: *** [CMakeFiles/AppProject.dir/all] Error 2
Makefile:117: recipe for target 'AppProject' failed
mingw32-make.exe[1]: *** [CMakeFiles/AppProject.dir/rule] Error 2
mingw32-make.exe: *** [AppProject] Error 2
mingw32-make.exe 3:没有规则可以将“AppProject.exe”所需的目标设为“../libuntitled”。停止。
答案 0 :(得分:1)
除了事实之外,我不会在第一个CMake-Project中创建一个库并在第二个中手动链接它。这可以帮助您:How do I tell CMake to link in a static library in the source directory?
但你应该寻找(如果可能的话)一种方法来创建一个带有子项目的CMake项目..这里有一个很好的解释的链接:http://techminded.net/blog/modular-c-projects-with-cmake.html
答案 1 :(得分:0)
我不熟悉cmake,但它应该生成-luntitled
,而不是-llibuntitled
来链接libuntitled.a
答案 2 :(得分:0)
我通过在.a库名称之前添加${CMAKE_SOURCE_DIR}
来修复未找到库的问题。显然Cmake需要完整的分类路径才能找到.a文件,即使在同一个目录中也是如此,这有点奇怪。
CmakeList.txt现在看起来像这样
target_link_libraries(AppProject ${CMAKE_SOURCE_DIR}/${MY_LIB})