我对在 Linux 64 位上使用 CMake 有疑问。我在 C 中有一个示例,它必须链接到一个库 (xr_arp.a),该库对另一个库 (libcrypto.a) 具有链接依赖关系。我为构建示例代码所做的以下生成文件已成功链接:
CFLAGS = -I../Common -I../xr -I../../../openssl/include
LIBS = ../xr/xr_arp.a ../../../openssl/lib/libcrypto.a
TARGET = sample
OBJFILES = sample.o
all: $(TARGET)
$(TARGET): Makefile $(OBJFILES)
$(CC) -o $@ $(OBJFILES) $(LIBS)
clean:
rm -rf *.o $(TARGET)
.SUFFIXES: .c .o
.c.o:
$(CC) -Wall $(CFLAGS) -c $<
但是,我想将此 makefile 转换为使用 CMake。当我使用以下 CMakeLists.txt 文件时,我得到 xr_arp.c 对“SHA1”的未定义引用,因为它似乎无法将 xr_arp.a 链接到 libcrypto.a:
cmake_minimum_required(VERSION 2.8)
project (SAMPLE C)
set(CMAKE_C_FLAGS "-Wall")
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/../Common
${CMAKE_CURRENT_SOURCE_DIR}/../xr
)
add_executable(
sample
sample.c
)
target_link_libraries(
sample
${CMAKE_CURRENT_SOURCE_DIR}/../../../openssl/lib/libcrypto.a
${CMAKE_CURRENT_SOURCE_DIR}/../xr/xr_arp.a
)
有人能指出这两个文件有什么区别吗?为什么它可以与 makefile 一起使用,而不能与 CMake 一起使用?有什么程序可以用来强制 xr_arp.a 和 libcrypto.a 之间的链接吗?请注意,这两个库都是第三方库,不是我的。