我正在开发一个非常大的项目,正在从使用自定义 Makefile 转向使用 cmake,但我仍然缺少使用 Makefile 实现的功能。
该项目有很多子目录,每个子目录都被编译成静态库,然后链接到最终的可执行文件中。
这是一个小例子
src/
lib1/
lib2/
lib3/
main.cpp
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
在 CMakeLists.txt 中可能是这样的:
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(lib3)
add_executable(test main.cpp)
target_link_libraries(test PUBLIC lib1 lib2 lib3)
Run Code Online (Sandbox Code Playgroud)
我想调试最终的可执行文件,但我不想使用调试符号构建所有静态库且不进行优化,因为这样调试就会变得太慢。
所以我想lib2用CMAKE_BUILD_TYPE=Release和lib1来lib3构建CMAKE_BUILD_TYPE=Debug。
请记住,实际上有大约 10 个库,而不是三个,我希望能够为每个库执行此操作,并同时为多个库执行此操作。
有没有办法从 main 做到这一点CMakeLists.txt?
我更希望能够从命令行实现这一点:
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(lib3)
add_executable(test main.cpp)
target_link_libraries(test PUBLIC lib1 lib2 lib3)
Run Code Online (Sandbox Code Playgroud) 以下哪一项是首选/更有效的?
初始化列表:
class Trial {
private:
std::vector<int> _vec;
public:
Trial(size_t length) : _vec(length) {
}
};
Run Code Online (Sandbox Code Playgroud)调整大小:
class Trial {
private:
std::vector<int> _vec;
public:
Trial(size_t length) {
_vec.resize(length);
}
};
Run Code Online (Sandbox Code Playgroud)我在生产代码中都见过,但我也听说如果你可以将一些工作委托给编译器,你应该这样做,所以我总是喜欢第一个。
其中一个比另一个更好吗?