初学scons编译脚本,直接使用Program进行编译会在main和sum/src目录下生成obj文件,该例子可将生成的obj文件放到build目录下。
项目目录:
│ SConstruct
│
├─build
├─main
│ main.cpp
│
└─sum
├─inc
│ dataSum.h
│
└─src
dataSum.cpp
SConstruct:
# SConstruct
# 设置编译器
env = Environment()
# 设置源文件目录和目标文件目录
src_dir = ''
inc_dir = 'sum/inc'
#src_files = ['main/main.cpp', 'sum/src/dataSum.cpp']
obj_dir = 'build/obj'
target = 'build/main'
# 设置编译选项
#env.Append(CXXFLAGS=['-std=c++11', '-Wall'])
# 添加源文件和头文件搜索路径
env.Append(CPPPATH=[inc_dir])
# 编译sum.cpp文件生成sum.o目标文件
env.Object(target=obj_dir+'/sum', source=src_dir+'sum/src/dataSum.cpp')
# 编译main.cpp文件生成main.o目标文件
env.Object(target=obj_dir+'/main', source=src_dir+'main/main.cpp')
# 链接目标文件生成可执行文件
env.Program(target, [obj_dir+'/main', obj_dir+'/sum'])
代码:
main.cpp
#include <iostream>
#include "dataSum.h"
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int num1, num2;
std::cin >> num1 >> num2;
std::cout << "the sum is : " << math_data_sum(num1,num2) << std::endl;
return 0;
}
dataSum.cpp
#include "dataSum.h"
int math_data_sum(int data1, int data2)
{
return data1 + data2;
}
dataSum.h
#ifndef _H_DATA_SUM_H_
#define _H_DATA_SUM_H_
int math_data_sum(int data1, int data2);
#endif
编译后的目录:
│ .sconsign.dblite
│ SConstruct
│ sumTest.exe
│
├─build
│ │ main.exe
│ │
│ └─obj
│ main.obj
│ sum.obj
│
├─main
│ main.cpp
│
└─sum
├─inc
│ dataSum.h
│
└─src
dataSum.cpp