我有一个由Makefile生成的目标文件列表,这些文件存储在mylib
目录下。我在编译项目中的子目录之一时试图链接这些目标文件(我不想生成可执行文件)。这是我的CMakeLists.txt
文件
cmake_minimum_required(VERSION 3.5.1)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g")
set( CMAKE_EXPORT_COMPILE_COMMANDS ON )
file(GLOB SOURCES "*.cpp" ".hpp")
include_directories(mylib)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/mylib)
add_library(slib SHARED ${SOURCES})
即mylib
目录包含在.h
上运行.cc
后生成的.o
,make
和mylib
文件。当我尝试对此进行编译时,出现Undefined symbols for architecture x86_64
函数的mylib
错误。
如何链接由外部make
生成的多个预编译目标文件?这个问题(how to add prebuilt object files to executable in cmake)提供了链接单个目标文件的方法。如何为所有目标文件执行此操作,并生成共享库而不是可执行文件?
我建议使用ExternalProject编译库“ mylib”(例如,通过直接调用gcc
,然后使用如下代码:
add_library (slib SHARED ${SOURCES})
target_link_libraries (slib "mylib")
add_dependencies
在某些情况下可能有用。