⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searched_lib.py

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 PY
字号:
#!/usr/bin/python# Copyright 2003 Dave Abrahams# Copyright 2003, 2004, 2005, 2006 Vladimir Prus# Distributed under the Boost Software License, Version 1.0.# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)# Test usage of searched-libs: one which are found via -l# switch to the linker/compiler.import BoostBuildimport osimport stringt = BoostBuild.Tester()# To start with, we have to prepare a library to link with.t.write("lib/jamroot.jam", "")t.write("lib/jamfile.jam", "lib test_lib : test_lib.cpp ;")t.write("lib/test_lib.cpp", """#ifdef _WIN32__declspec(dllexport)#endifvoid foo() {}""");t.run_build_system(subdir="lib")t.expect_addition("lib/bin/$toolset/debug/test_lib.dll")# Auto adjusting of suffixes does not work, since we need to# change dll to lib.if ( ( os.name == "nt" ) or os.uname()[0].lower().startswith("cygwin") ) and \    ( BoostBuild.get_toolset() != "gcc" ):    t.copy("lib/bin/$toolset/debug/test_lib.implib", "lib/test_lib.implib")    t.copy("lib/bin/$toolset/debug/test_lib.dll", "lib/test_lib.dll")else:    t.copy("lib/bin/$toolset/debug/test_lib.dll", "lib/test_lib.dll")# Test that the simplest usage of searched library works.t.write("jamroot.jam", "")t.write("jamfile.jam", """import path ;import project ;local here = [ project.attribute $(__name__) location ] ;here = [ path.root $(here) [ path.pwd ] ] ;exe main : main.cpp helper ;lib helper : helper.cpp test_lib ;lib test_lib : : <name>test_lib <search>lib ;""")t.write("main.cpp", """void helper();int main() { helper(); }""")t.write("helper.cpp", """void foo();void#if defined(_WIN32)__declspec(dllexport)#endifhelper() { foo(); }""")t.run_build_system()t.expect_addition("bin/$toolset/debug/main.exe")t.rm("bin/$toolset/debug/main.exe")# Test that 'unit-test' will correctly add runtime paths to searched libraries.t.write("jamfile.jam", """import path ;import project ;import testing ;project : requirements <hardcode-dll-paths>false ;local here = [ project.attribute $(__name__) location ] ;here = [ path.root $(here) [ path.pwd ] ] ;unit-test main : main.cpp helper ;lib helper : helper.cpp test_lib ;lib test_lib : : <name>test_lib <search>lib ;""")t.run_build_system()t.expect_addition("bin/$toolset/debug/main.passed")t.rm("bin/$toolset/debug/main.exe")# Now try using searched lib from static lib. Request shared version of searched# lib, since we do not have a static one handy.t.write("jamfile.jam", """exe main : main.cpp helper ;lib helper : helper.cpp test_lib/<link>shared : <link>static ;lib test_lib : : <name>test_lib <search>lib ;""")t.run_build_system(stderr=None)t.expect_addition("bin/$toolset/debug/main.exe")t.expect_addition("bin/$toolset/debug/link-static/helper.lib")t.rm("bin/$toolset/debug/main.exe")# A regression test: <library>property referring to searched-lib was being# mishandled. As the result, we were putting target name to the command line!# Note that#    g++ ...... <.>z# works nicely in some cases, sending output from compiler to file 'z'. This# problem shows up when searched libs are in usage requirements.t.write("jamfile.jam", "exe main : main.cpp d/d2//a ;")t.write("main.cpp", """void foo();int main() { foo(); }""")t.write("d/d2/jamfile.jam", """lib test_lib : : <name>test_lib <search>../../lib ;lib a : a.cpp : : : <library>test_lib ;""")t.write("d/d2/a.cpp", """#ifdef _WIN32__declspec(dllexport) int force_library_creation_for_a;#endif""")t.run_build_system()# A regression test. Searched targets were not associated with any properties.# For that reason, if the same searched lib is generated with two different# properties, we had an error saying they are actualized to the same Jam target# name.t.write("jamroot.jam", "")t.write("a.cpp", "")# The 'l' library will be built in two variants: 'debug' (directly requested)# and 'release' (requested from 'a').t.write("jamfile.jam", """exe a : a.cpp l/<variant>release ;lib l : : <name>l_d <variant>debug ;lib l : : <name>l_r <variant>release ;""")t.run_build_system("-n")# A regression test. Two virtual target with the same properties were created# for 'l' target, which caused and error to be reported when actualizing# targets. The final error is correct, but we should not create two duplicated# targets. Thanks to Andre Hentz for finding this bug.t.write("jamroot.jam", "")t.write("a.cpp", "")t.write("jamfile.jam", """project a : requirements <runtime-link>static ;static-lib a : a.cpp l ;lib l : : <name>l_f ;""")t.run_build_system("-n")# Make sure plain "lib foobar ; " works.t.write("jamfile.jam", """exe a : a.cpp foobar ;lib foobar ;""")t.run_build_system("-n -d2")t.fail_test(string.find(t.stdout(), "foobar") == -1)# Make sure plain "lib foo bar ; " works.t.write("jamfile.jam", """exe a : a.cpp foo bar ;lib foo bar ;""")t.run_build_system("-n -d2")t.fail_test(string.find(t.stdout(), "foo") == -1)t.fail_test(string.find(t.stdout(), "bar") == -1)t.cleanup()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -