Build CMake:如何链接静态第三方库?

Build CMake:如何链接静态第三方库?,build,linker,build-process,cmake,Build,Linker,Build Process,Cmake,我拥有的:我的代码(simple main.cpp)、第三方库的标题(EnvVarTPLIB\u INCLUDE)、二进制库(位于TPLIB\u binary\u路径中的几个.a文件)和以下CMakeLists.txt: # current source directory: CMAKE_CURRENT_SOURCE_DIR # current binary directory: CMAKE_CURRENT_BINARY_DIR # require 2.6 to get support for

我拥有的:我的代码(simple main.cpp)、第三方库的标题(EnvVar
TPLIB\u INCLUDE
)、二进制库(位于
TPLIB\u binary\u路径中的几个.a文件)和以下CMakeLists.txt:

# current source directory: CMAKE_CURRENT_SOURCE_DIR
# current binary directory: CMAKE_CURRENT_BINARY_DIR

# require 2.6 to get support for the simple IF construct
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0)

PROJECT( simpleapp)
SET( PROGNAME simpleapp )

SET( CMAKE_COLOR_MAKEFILE ON )
SET( CMAKE_VERBOSE_MAKEFILE ON )
SET( CMAKE_INCLUDE_CURRENT_DIR TRUE )

# the actual .cpp files go here
SET(project_SOURCES
    main.cpp
)

# add here all files that need processing by Qt's MOC if there are any
set(project_MOC_SOURCES
    # files would go here
)

# add here all files that will be processed by Qt's UIC
set(project_UIS
    # all .ui files would go here
)

# additional Qt resources go here
set(project_RCCS
    # all .qrc files would go here
)

# setup Qt
FIND_PACKAGE(Qt4 REQUIRED)

INCLUDE(${QT_USE_FILE})

QT4_WRAP_CPP(test_MOCS ${project_MOC_SOURCES})
QT4_WRAP_UI(test_UIS_H ${project_UIS})
QT4_WRAP_CPP(test_MOC_UI ${project_UIS_H})
QT4_ADD_RESOURCES(test_RCC_SRCS ${project_RCCS})

include_directories( ${CMAKE_BINARY_DIR} $ENV{TPLIB_INCLUDE})

ADD_EXECUTABLE( ${PROGNAME} ${project_SOURCES} ${test_MOCS} ${test_RCC_SRCS} ${test_MOC_UI} )

link_directories($ENV{TPLIB_BINARY_PATH})

TARGET_LINK_LIBRARIES(${PROGNAME} ${QT_LIBRARIES} lib_misc lib_tools)
make
ing项目创建
main.cpp.o
正常工作。因此,CMake找到了第三方头文件。当涉及到链接
ld
投诉时,无法找到-llib_杂项和-llib_工具。 删除“link_directories”行或指定libs绝对名称会导致“没有规则使target/path/to/lib_misc.a”

那么如何告诉CMake仅将这些lib用于链接?

link\u目录($ENV{TPLIB\u BINARY\u PATH})
应该放在
添加可执行文件之前

从中,有关于
链接\u目录的注释

该命令将仅应用于调用后创建的目标


或者,避免完全使用link_目录,并使用target_link_libraries参数列表中库文件的完整路径名:“target_link_libraries(${PROGNAME}${QT_libraries}$ENV{TPLIB二进制_path}/libliblib_misc.a$ENV{TPLIB_二进制_path}/liblib_tools.a)”如果文件名实际上是“lib_misc.a”,那么您只需要传递如果您在添加可执行文件之前使用链接目录,请使用“\u misc”以链接库为目标…您所说的“This”是什么意思"? 使用完整路径名,还是使用短名称?两者都应该与CMake 2.8.9配合使用。如果不是,你有一个输入错误或者有一个bug。。。CMake邮件列表中应提及重新处理问题的具体步骤。那里的人可以帮你找到打字错误或把它修好。