target_link_libraries接口的使用

target_link_libraries需要放在add_executable之后,用于指明连接进来的库,官方推荐使用这个接口,而不推荐使用link_libraries,link_libraries需要放到add_executable之前。

当编写一个大工程,使用add_subdirectory包括其他的工程,比如下列目录这种情况


├── bit_operate
│   ├── CMakeLists.txt
├── cmake
│   └── toolschain
├── CMakeLists.txt
├── compile.sh
├── container
│   ├── CMakeLists.txt
├── core
│   ├── CMakeLists.txt
├── data
│   ├── CMakeLists.txt
├── encrype_decrype
│   ├── CMakeLists.txt
├── io
│   ├── CMakeLists.txt
├── ipc
│   ├── CMakeLists.txt
├── README.md
├── stat.sh

根目录的CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.5)
project (main)

message("DEBUG" ${CMAKE_CXX_FLAGS})
if(CMAKE_BUILD_TARGET STREQUAL ArmPoky)
	#設置toolchain文件路徑
	set(CMAKE_TOOLCHAIN_FILE
		${CMAKE_SOURCE_DIR}/cmake/toolschain/ArmPony.cmake)
	message(STATUS "CMAKE_TOOLCHAIN_FILE:" ${CMAKE_TOOLCHAIN_FILE})
else() 
#HOST ENV 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()

message("DEBUG" ${CMAKE_CXX_FLAGS})

# Add an executable
#add_executable(main test_printf.cpp)
add_subdirectory(encrype_decrype)
add_subdirectory(core)
add_subdirectory(io)
add_subdirectory(ipc)
add_subdirectory(container)
add_subdirectory(assemebly_language)
add_subdirectory(bit_operate)
add_subdirectory(data)
add_subdirectory(openssl)

if(CMAKE_BUILD_TARGET STREQUAL ArmPoky)
SET(CMAKE_ARM_COMPILATION 1)
endif()

最开始想当然,在这个文件的最后的add_subdirectory命令下面添加target_link_libraries接口,但是报错:

Attempt to add link library "libreadline.so" to target "TEST_FILE_IO" which
  is not built in this directory

 然后把target_link_libraries放到对应TEST_FILE_IO的工程CMakeLists.txt中,不再报错。

cmake_minimum_required(VERSION 3.5)

# Set the project name

project (TEST_FILE_IO)

# Add an executable

add_executable(TEST_FILE_IO getfiles.cpp)

target_link_libraries(TEST_FILE_IO libreadline.so)

所以target_link_libraries需要跟着add_executable或者类似功能(指明编译可执行文件或者编译库)的接口走。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值