CMAKE 生成的生成文件不创建静态库
cmake generated makefile doesn't create static library
我有一个CMakeLists.txt项目的来源,该项目包含:
ADD_LIBRARY(ACGL${COMPILE_POSTFIX} STATIC ${SOURCE_FILES} ${HEADER_FILES})
TARGET_LINK_LIBRARIES(ACGL${COMPILE_POSTFIX} ${LIBRARIES})
使用cmake,我通过为MSYS生成了一个带有-std=gnu++11选项的makefile
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
这运行良好,所有.obj文件都是在使用make时创建的。然而,在创建所有.obj文件后,它不会生成静态库,因此终止时出现错误:
[...]
[ 90%] Building CXX object CMakeFiles/ACGL.dir/src/rgbe/rgbe.cc.obj
[ 93%] Building CXX object CMakeFiles/ACGL.dir/src/lodepng/lodepng.cpp.obj
[ 95%] Building CXX object CMakeFiles/ACGL.dir/src/nv_dds/nv_dds.cpp.obj
Linking CXX static library "/C/Users/Tarek/Desktop/Netbeans Workspace/acgl/lib/l
ibACGL.a"
C:/MinGW/bin/ar.exe: /C/Users/Tarek/Desktop/Netbeans Workspace/acgl/lib/libACGL.
a: No such file or directory
make[2]: *** [C:/Users/Tarek/Desktop/Netbeans Workspace/acgl/lib/libACGL.a] Erro
r 1
make[1]: *** [CMakeFiles/ACGL.dir/all] Error 2
make: *** [all] Error 2
有人能向我解释为什么没有创建库,即使在cmakelists中指定了ADD_library吗?如果有帮助的话,这是完整生成的makefile:https://gist.github.com/anonymous/1c4982a86794f8c490b6
生成makefile时是否有问题?
如果你还需要其他东西,请评论,我会提供。
我通过查看link.txt修复了这个问题,在我的案例中,它位于acgl_bin\CMakeFiles\acgl.dir\link.txt它包含负责创建库的行:
C:/MinGW/bin/ar.exe cr "/c/Users/Tarek/Desktop/Netbeans Workspace/acgl/lib/libACGL.a" CMakeFiles/ACGL.dir/src/ACGL/ACGL.cc.obj [more obj files]
C:/MinGW/bin/ranlib.exe "/c/Users/Tarek/Desktop/Netbeans Workspace/acgl/lib/libACGL.a"
ar找不到路径,所以我将其更改为相对路径:
C:/MinGW/bin/ar.exe cr "../acgl/lib/libACGL.a" CMakeFiles/ACGL.dir/src/ACGL/ACGL.cc.obj [more obj files]
C:/MinGW/bin/ranlib.exe "../acgl/lib/libACGL.a"
一切都很顺利。
相关文章:
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- 如何在不使用静态矩形方法的情况下创建 IDOMPathGeometryPtr?
- 如何使用类型级函数动态创建静态类型?
- 返回从字符串文本创建的静态string_view是否安全?
- QBS 为静态链路 MSVC 创建静态库
- 如何为要在 C# 中使用的静态库创建 C++ 或 C++/CLI 包装器
- 如何使用 GCC 编译器优化创建静态库?
- 如何使用指向动态数组的静态指针创建类?
- 为静态类创建指向对象的指针是否合法?
- 为动态创建的数组使用静态关键字有什么意义吗?
- 创建自己的owner_ptr类;在传递堆栈或静态分配的地址时如何避免UB?
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 如何使用 c++ 源代码和静态库创建 iOS 框架
- 创建静态哨兵节点的正确方法是什么
- 如何从静态c和c++库创建共享c库
- 创建类型列表并访问每种类型的静态成员?
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 为什么在静态创建 OBJ 时调用私有析构函数
- 从静态创建方法中的基类调用非静态方法
- 内联函数返回静态创建的对象