Cmake 在静态库档案中生成文件扩展名

zei*_*tue 1 c++ cmake

我最近从 Autotools 切换到 CMake,因为 CMake 似乎更适合跨平台开发,我注意到当我构建我的 C++ 代码的静态库时,里面的所有文件都有一个后缀 .cpp.o

ar -t PA8/libgenericTZR.a 
genericTZR.cpp.o
Run Code Online (Sandbox Code Playgroud)

我看过其他工具构建的其他库,但他们没有这样做。我不确定这是否真的是一件坏事,但是,如何在没有 .cpp 添加文件扩展名的情况下让 CMake 构建静态库?

这是我的 CMake 文件

add_executable(PA8 ISP_Charges.cpp genericTZR.cpp genericTZR.h)

set(LIBSRC genericTZR.c genericTZR.h)
add_library(genericTZR SHARED ${LIBSRC})
add_library(genericTZR SHARED $<TARGET_OBJECTS:myObjects>)

add_library(genericTZR-static STATIC ${LIBSRC})
set_target_properties(genericTZR-static PROPERTIES OUTPUT_NAME $

install (TARGETS PA8 DESTINATION bin)
install (TARGETS genericTZR genericTZR-static DESTINATION lib)
install (FILES "${PROJECT_BINARY_DIR}/PA8/genericTZR.h" DESTINA$
Run Code Online (Sandbox Code Playgroud)

谢谢

Leo*_*rdo 5

根据cmake list 上的这个线程(我同意它),尝试更改输出文件名不是一个好主意。

考虑链接中给出的示例:

 add_executable(foo foo.c foo.cpp)
Run Code Online (Sandbox Code Playgroud)

生成的对象将是foo.c.ofoo.cpp.o。如果你强迫他们只有.o扩展名,他们就会发生冲突。

您可以尝试使用未记录的、内部的、未来可能会改变的

set(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1)
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)
Run Code Online (Sandbox Code Playgroud)

我不知道它们是否仍然可用,或者是否有效。我从来没有用过它们。

正如对您帖子的评论所阐明的那样,静态库中的名称并未真正使用,您不必担心它们。

  • @TaylorBioniks 任何理智的人都不会,但我不能在没有警告的情况下将其放在那里:) 此外,如果您使用文件(GLOB)创建源列表,则可能会发生这种情况。 (2认同)