c++/cmake/cmakelists/cmakelists子目录的添加

04
六月
2021
cmake_minimum_required(VERSION 3.10)

project(learning_to_create_project)

set(CMAKE_CXX_STANDARD 11)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

find_package(OpenCV REQUIRED)

include_directories(
        ${PROJECT_SOURCE_DIR}/include/)

add_library(${PROJECT_NAME} SHARED
        src/China.cpp
        src/i.cpp
        src/love.cpp
)

add_executable(i_love_China example/i_love_China.cpp)
target_link_libraries(i_love_China
        ${OpenCV_LIBS}
        ${PROJECT_NAME}

cmake_minimum_required(VERSION 2.8):cmake版本要求;

set(CMAKE_CXX_STANDARD 11):设置C++标准为C++11;

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib):设置库文件输出到代码源路径下的lib文件夹中;

find_package:找到OpenCV的库,REQUIRED表示一定要找到这个库,找不到这个库,编译就直接结束,不再往下进行了;(这里只是示范写法,实际上没有用到OpenCV);

include_directories:用于包含头文件,需要指明头文件所在的目录,如果前面使用了find_package(x)去查找到了某一个库,那么就可以使用这个命令去包含这个库的头文件,例如:include_directories(${x_INCLUDE_DIRS}

target_link_libraries(i_love_China ${OpenCV_LIBS} ${PROJECT_NAME}):用于链接库文件。根据调库原则,一是要有库的头文件,二是要有库生成的共享或者静态链接库,include_directories命令已经包含了头文件,所以需要用target_link_libraries包含库文件,前一个参数表示的是可执行文件的名称,这个文件执行需要链接那些库,就全写在后面。

add_library:编译产生链接库,我这里产生的是动态链接库。如果你将自己的代码编译产生了库文件,那个你把库文件和头文件给别人,别人就可以调用你的函数执行相关计算工作了。

复杂的结构cmakelists怎么用,用空再整理一下?

  ParentDir 
--src 
----source.cpp 
----source.h 
----entities_dir 
------entity.cpp 
------entity.h 
------CMakeLists.txt 
----CMakeLists.txt 
--CMakeLists.txt 
--main.cpp 

 

TAG

网友评论

共有访客发表了评论
请登录后再发布评论,和谐社会,请文明发言,谢谢合作! 立即登录 注册会员