我的项目来源包含CMakeLists.txt,其中包含:
ADD_LIBRARY(ACGL${COMPILE_POSTFIX} STATIC ${SOURCE_FILES} ${HEADER_FILES})
TARGET_LINK_LIBRARIES(ACGL${COMPILE_POSTFIX} ${LIBRARIES})
使用cmake我通过
设置-std = gnu ++ 11选项为MSYS生成一个makefileSET(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有什么问题吗?
如果您还需要其他任何内容,请发表评论,我会提供。
答案 0 :(得分:1)
我通过查看我的案例中的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"
无法找到路径,因此我将其更改为相对路径:
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"
一切都很好。