【发布时间】:2014-09-09 02:52:49
【问题描述】:
我的项目中有很多库,还有很多单独的应用程序。我的一些库有依赖库,其中一些是外部库,我希望应用程序 CMakeList.txt 文件更简单。我希望使用宏来简化。
下面是一个大大简化的测试用例。例如,在我的项目中,包括我的一个库还需要 ImageMagick、pugixml、jsoncpp、liboauthcpp 等的 include_directories、link_directories 和 target_link_libraries ......而且,其中一些第三方库需要编译器标志。我的项目下面的 _LIB() 宏版本会更长...
问题:有没有办法让下面的 _LIB() 宏自动向调用该宏的 target_link_libraries 添加一些内容?
我不知道该怎么做,因为 target_link_libraries 参数 1 是目标名称,每个应用程序都会更改。
~/codeTest/CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(codeTest)
macro(_LIB)
include_directories(~/codeTest/lib)
link_directories(~/codeTest/lib)
endmacro()
add_subdirectory(lib)
add_subdirectory(app)
~/codeTest/lib/CMakeLists.txt
include_directories(~/codeTest/lib)
add_library(lib lib.cpp)
~/codeTest/lib/lib.h
#ifndef __LIB__
#define __LIB__
namespace LIB {
unsigned long libFunc(unsigned long inValue);
}
#endif
~/codeTest/lib/lib.cpp
#include <lib.h>
namespace LIB {
unsigned long libFunc(unsigned long inValue) {
return inValue+1;
}
}
~/codeTest/app/CMakeLists.txt
_LIB()
add_executable(app app.cpp)
target_link_libraries(app lib)
~/codeTest/app/app.cpp
#include <lib.h>
using namespace LIB;
int main() {
unsigned long x = 1;
unsigned long y = libFunc(x);
}
【问题讨论】: