我最近从Autotools切换到CMake,因为CMake似乎更适合跨平台开发,而且我注意到当我构建一个C ++代码的静态库时,里面的所有文件都有一个后缀.cpp.o
ar -t PA8/libgenericTZR.a
genericTZR.cpp.o
我查看了其他工具构建的其他库,但他们不这样做。我不确定这是不是真的坏事但是,如何在没有.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$
由于
答案 0 :(得分:2)
根据this thread on cmake list(我同意),尝试更改输出文件名不是一个好主意。
考虑链接中的示例:
add_executable(foo foo.c foo.cpp)
生成的对象为foo.c.o
和foo.cpp.o
。如果你强迫他们只拥有.o
扩展名,他们就会发生冲突。
您可以尝试使用未记录的,内部的,可能会在将来更改的
set(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1)
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)
我不知道他们是否仍然可用或是否有效。我从来没有用过它们。
由于您对帖子的评论已经澄清,静态库中的名称并未真正使用,您不必担心它们。