【问题标题】:cmake generated makefile doesn't create static librarycmake生成的makefile不会创建静态库
【发布时间】:2014-10-19 14:44:04
【问题描述】:

我有一个 CMakeLists.txt 项目的源代码,其中包含:

ADD_LIBRARY(ACGL${COMPILE_POSTFIX} STATIC ${SOURCE_FILES} ${HEADER_FILES})
TARGET_LINK_LIBRARIES(ACGL${COMPILE_POSTFIX} ${LIBRARIES})

我使用 cmake 为 MSYS 生成一个 makefile,并设置了 -std=gnu++11 选项

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 吗? 如果有帮助,这是完整的生成文件: https://gist.github.com/anonymous/1c4982a86794f8c490b6

makefile的生成有问题吗?

另外,如果你需要什么,请评论,我会提供。

【问题讨论】:

    标签: c++ makefile cmake static-libraries


    【解决方案1】:

    我通过查看在我的情况下位于 acgl_bin\CMakeFiles\ACGL.dir\link.txt 的 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"
    

    一切都编译好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-02
      • 2021-11-21
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多