单个目录单个文件
-
CMakeLists.txt怎么写
cmake_minimum_required(VERSION 3.6) project(myproj) add_executable(exea main.cpp)
说明:
- 第一行指定最低的cmake版本号。
- 第二行指明工程的名字。
- 第三行指生成可执行文件。参数1是可执行文件的名字,参数2是源文件名。
-
CMakeLists.txt写好了怎么用
- 在CMakeLists.txt所在的目录下打开终端
- 输入
cmake ./
来生成makefile - 输入
make
来生成可执行文件 - 输入
./exea
来执行程序。
单个目录多个文件
-
CMakeLists.txt怎么写
cmake_minimum_required(VERSION 3.6) project(myproj) aux_source_directory(./ BIAN_LIANG_1) add_executable(exea ${BIAN_LIANG_1})
说明:
- 第三行是指把当前目录下的所有源文件赋值给一个变量,参数1是目录,参数2是变量名。
多个目录多个文件
-
目录结构是怎样的
-
假设项目的根目录下有
CMakeLists.txt
、main.cpp
、mylib
,其中mylib
是文件夹。 -
mylib
下面有CMakeLists.txt
、mymath.h
、mymath.cpp
-
-
内层的文件展示
- mymath.h
int f(int a, int b);
- mymath.cpp
#include "mymath.h" int f(int a, int b) { return (a + b); }
- CMakeLists.txt
aux_source_directory(./ bianlianga) add_library(MyLibMath ${bianlianga})
-
外层文件展示
- main.cpp
#include <stdio.h> #include "mylib/mymath.h" int main(int argc, char * argv[]) { int a = 0; int b = 0; scanf("%d", &a); scanf("%d", &b); printf("a+b=%d\n", f(a, b)); return 0; }
- CMakeLists.txt
cmake_minimum_required(VERSION 3.6) project(myproj) add_subdirectory(./mylib) #向当前工程添加存放源文件的子目录 aux_source_directory(./ BIAN_LIANG_1) add_executable(exea ${BIAN_LIANG_1}) target_link_libraries(exea MyLibMath) #向target添加需要链接的库
多个目录多个文件的标准格式
-
啥是标准格式?
- 根目录只有一个CMakeLists.txt和若干个文件夹。
- 编译过程中产生的中间文件单独放一个文件夹里,不会污染源文件目录。
-
例子的目录结构是怎样的?
- 根目录下有一个CMakeLists.txt、src文件夹、mylib文件夹、build文件夹。
- src下有一个main.cpp、CMakeLists.txt。
- mylib下有mymath.h和mymath.cpp和CMakeLists.txt。
- build目录为空。
-
src文件夹内容展示
include_directories(${project_source_dir}/mylib) #向工程添加多个特定的头文件搜索路径 aux_source_directory(./ bianlianga) add_executable(exea ${bianlianga}) target_link_libraries(exea MyLibMath)
#include <stdio.h> #include "../mylib/mymath.h" int main(int argc, char * argv[]) { int a = 0; int b = 0; scanf("%d", &a); scanf("%d", &b); printf("a+b=%d\n", f(a, b)); return 0; }
-
顶层的CMakeLists.txt
cmake_minimum_required(VERSION 3.6) project(myproj) add_subdirectory(./mylib) add_subdirectory(./src)
-
使用注意,cd到build目录下
cd build/ cmake .. make ./src/exea
网友评论