C++ CMake将(.o)文件作为输出

C++ CMake将(.o)文件作为输出,c++,makefile,cmake,C++,Makefile,Cmake,我试图让MU+ C++代码编译为对象文件(.O),但是我可以在(.,DyLIB,可执行文件)表单< /P>中获得它。 我试过这个答案: 但是我并不真正理解这个解决方案,它也不起作用 我怎样才能做到这一点 这是我的CMake文件: cmake_minimum_required(VERSION 3.10) project(myProject) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED True) set(LIBS_DIR

我试图让MU+ C++代码编译为对象文件(.O),但是我可以在(.,DyLIB,可执行文件)表单< /P>中获得它。 我试过这个答案:

但是我并不真正理解这个解决方案,它也不起作用

我怎样才能做到这一点

这是我的CMake文件:

cmake_minimum_required(VERSION 3.10)

project(myProject)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(LIBS_DIR ${PROJECT_SOURCE_DIR}/../libs)

file(GLOB SOURCES
            src/*.cpp
            )

find_library(SQLITE3
             NAMES libsqlite3.0.tbd
             )

MACRO(HEADER_DIRECTORIES return_list)
    FILE(GLOB_RECURSE new_list ${LIBS_DIR}/*.h*)
    SET(dir_list "")
    FOREACH(file_path ${new_list})
        GET_FILENAME_COMPONENT(dir_path ${file_path} PATH)
        SET(dir_list ${dir_list} ${dir_path})
    ENDFOREACH()
    LIST(REMOVE_DUPLICATES dir_list)
    SET(${return_list} ${dir_list})
ENDMACRO()

add_library(${PROJECT_NAME}_obj OBJECT ${SOURCES})


HEADER_DIRECTORIES(HDR_DIRS)

target_include_directories(${PROJECT_NAME}_obj PUBLIC
                           ${PROJECT_BINARY_DIR}
                           ${PROJECT_SOURCE_DIR}/include
                           ${PROJECT_SOURCE_DIR}/../fmt
                           ${PROJECT_SOURCE_DIR}/../include
                           ${HDR_DIRS}
                           )

target_link_libraries(${PROJECT_NAME}_obj ${SQLITE3})



由于链接器(ld util)的功能,您无法将多个翻译单元合并到单个对象文件中。只能合并到库或elf


早期的gcc可以将多个文件合并到单个目标文件中,但此功能已被删除

是否要获得此结果?@Andrey感谢您的评论,我已经尝试过了,但这将源文件的每个文件都作为.o文件提供给了我。我需要整个可执行文件都是一个.o文件file@MazenAk你需要整个“可执行文件”要成为目标文件,编译单个源文件的结果?为什么?@JaMiT我需要获取输出文件并使用它编译另一个源文件executable@MazenAk这就是
.a
表单(静态库)的用途。