创建四个文件:a.h、a.c、main.c、CMakeLists.txt
a.h
#ifndef A_FILE
#define A_FILE
#include <math.h>
double get_val(double val);
#endif
a.c
#include "a.h"
double get_val(double val)
{
return sqrt(val);
}
main.c
#include <stdio.h>
#include "a.h"
#define WIDTH_COLOR
#ifdef WIDTH_COLOR
#define COLOR_DEBUG "\e[0;32m"
#define COLOR_INFO "\e[0;38m"
#define COLOR_WARNING "\e[01;35m"
#define COLOR_ERROR "\e[01;31m"
#define COLOR_END "\e[0m"
#define DEBUG_LOG(str,...) \
fprintf(stdout, COLOR_DEBUG "DEBUG: " str COLOR_END, ##__VA_ARGS__);
#define INFO_LOG(str, ...) \
fprintf(stdout, COLOR_INFO str COLOR_END, ##__VA_ARGS__);
#define WARNING_LOG(str, ...) \
fprintf(stderr, COLOR_WARNING "WARNING: " str COLOR_END, ##__VA_ARGS__);
#define ERROR_LOG(str, ...) \
fprintf(stderr, COLOR_ERROR "ERROR: " str COLOR_END, ##__VA_ARGS__);
#else
#define DEBUG_LOG(...) \
fprintf(stdout, "DEBUG: " __VA_ARGS__);
#define INFO_LOG(...) \
fprintf(stdout, __VA_ARGS__);
#define WARNING_LOG(...) \
fprintf(stderr, "WARNING: " __VA_ARGS__);
#define ERROR_LOG(...) \
fprintf(stderr, "ERROR: " __VA_ARGS__);
#endif
int main()
{
DEBUG_LOG("%s\n","debug log")
INFO_LOG("%s\n","info log")
WARNING_LOG("%s\n","warning_log")
ERROR_LOG("%s\n","error_log")
#ifdef USE_DEFINE
INFO_LOG("%f\n",get_val(4.0))
#else
INFO_LOG("No define USE_DEFINE")
#endif
return 0;
}
CMakeLists.txt
#项目名称
PROJECT(test)
#把当前路径添加到include里面
include_directories(.)
#在当前目录下找到所有*.c源文件 这里是找到a.c文件
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
#找到的源文件列表设置给TEST_PATH变量
SET(TEST_PATH ${DIR_SRCS})
#添加USE_DEFINE预定义宏
add_definitions(-DUSE_DEFINE)
#创建可执行程序 这里起名叫A
ADD_EXECUTABLE(A ${TEST_PATH})
#添加可执行程序test的库依赖 (m:libm.so)
target_link_libraries(A m)
创建生成过程
第一步:创建build目录,为了使生成的文件都能够在build目录里面而不影响我们当前的文件结构
mkdir build
第二步:进入build目录
cd build
第三步:生成MakeFile,".."告诉cmake,CMakeLists.txt在上级目录里
cmake ..
第四步:生成执行程序
make
(或者这四个命令合起来一气呵成:mkdir build && cd build && cmake .. && make)
程序运行结果:
这些带颜色的日志就要归功于上面的那几个宏定义,结果输出2.0显然我们预定义的USE_DEFINE起作用了。
更多关于CMakeLists.txt参考传送门:https://blog.csdn.net/afei__/article/details/81201039